Open-source MCP server for Google Ads & Meta Ads — manage campaigns from any AI assistant.
Adrex AI is an open-source MCP (Model Context Protocol) server that connects AI assistants to your Google Ads and Meta Ads accounts. Instead of navigating complex dashboards, you manage campaigns, reporting, keywords, and targeting through natural language — from Claude, Cursor, Codex, or any MCP client.
Platforms: Google Ads and Meta Ads (Facebook & Instagram) today — TikTok and LinkedIn coming soon.
You: "Show me my Google Ads performance for the last 7 days"
Claude: [calls google_ads_campaign_performance] → table with spend, clicks, CTR, ROAS
You: "Pause the campaign with the lowest ROAS"
Claude: [calls google_ads_pause_campaign] → campaign paused, no more spend
You: "Create a Meta campaign for our summer sale, $50/day budget"
Claude: [calls meta_ads_create_campaign] → campaign created PAUSED for your review
You connect your ad accounts once in the Adrex dashboard (secure OAuth — your tokens stay on our servers, never in the MCP client), then drive everything from your AI assistant. There are two ways to connect (see Quick Start): a remote server with browser sign-in — no API key, or this npx server with an API key.
These tools operate on real ad accounts that spend real money:
First, sign up at adrex.ai and connect your Google/Meta ad accounts in Settings. Then pick one of the two ways to connect.
Connect over HTTP and authorize in your browser — nothing to copy or paste. Your client stores its own secure token. In the Adrex dashboard, Settings → Connect to your AI (MCP) shows a one-command connect with your server URL. It looks like:
Claude Code:
claude mcp add --transport http adrex-ai https://<your-adrex-server>/mcp
Claude Desktop / Cursor / VS Code / other clients (JSON) — or use the one-click Add to Cursor / Add to VS Code buttons in Settings:
{
"mcpServers": {
"adrex-ai": { "type": "http", "url": "https://<your-adrex-server>/mcp" }
}
}
After adding, your client opens a browser tab — sign in and click Authorize. The consent screen shows which Adrex account you're authorizing as; if a different account is already signed in on that browser, use Not you? Switch before approving.
You can see and revoke every connected app in Settings → Connect to your AI → Connected AI apps.
Connected the wrong account? Every tool will report "Not connected" even though your ad accounts are linked. Revoke the app in Settings, then re-authorize. Note that re-running
claude mcp adddoes nothing once the server is configured (already exists in local config) — instead run/mcpin Claude Code, pickadrex-ai, and clear authentication.
Prefer the classic stdio server? Generate an API key in Settings, then add it below. Adrex ships a standard stdio MCP server, so it works with any MCP client — every config points at npx -y adrex-ai with your ADREX_API_KEY.
Claude Code:
claude mcp add -s user adrex-ai -e ADREX_API_KEY=your-api-key -- npx -y adrex-ai
Gemini CLI:
gemini mcp add adrex-ai -e ADREX_API_KEY=your-api-key -- npx -y adrex-ai
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json), Cursor (~/.cursor/mcp.json global or .cursor/mcp.json per-project), Gemini CLI (~/.gemini/settings.json), or any client using the JSON mcpServers format:
{
"mcpServers": {
"adrex-ai": {
"command": "npx",
"args": ["-y", "adrex-ai"],
"env": {
"ADREX_API_KEY": "your-api-key"
}
}
}
}
Codex (~/.codex/config.toml) — note Codex uses TOML, not JSON:
[mcp_servers.adrex-ai]
command = "npx"
args = ["-y", "adrex-ai"]
env = { ADREX_API_KEY = "your-api-key" }
Any other MCP client (Cline, Windsurf, Zed, Continue, …): point it at command npx -y adrex-ai with env ADREX_API_KEY set to your key.
That's it — no SDK setup, no developer tokens, no OAuth juggling. The server forwards each request to the Adrex backend, which uses the ad-account credentials you connected in the dashboard.
Behind a corporate proxy? v1.0.4+ automatically routes through
HTTP_PROXY/HTTPS_PROXY.
| Tool | Description |
|---|---|
google_ads_list_accounts | List all accessible Google Ads accounts |
google_ads_list_campaigns | List campaigns with performance metrics |
google_ads_get_campaign | Get detailed campaign info and metrics |
google_ads_create_search_campaign | Create a Search campaign (created PAUSED) |
google_ads_update_campaign | Update name, budget, or bidding strategy |
google_ads_pause_campaign | Pause a campaign |
google_ads_resume_campaign | Resume a paused campaign |
google_ads_delete_campaign | Permanently remove a campaign |
| Tool | Description |
|---|---|
google_ads_list_ad_groups | List ad groups with metrics |
google_ads_create_ad_group | Create an ad group with CPC bid |
google_ads_update_ad_group | Update name, bid, or status |
google_ads_pause_ad_group | Pause an ad group |
google_ads_delete_ad_group | Remove an ad group |
| Tool | Description |
|---|---|
google_ads_list_ads | List ads with headlines, URLs, and metrics |
google_ads_create_responsive_search_ad | Create RSA with headlines & descriptions |
google_ads_pause_ad | Pause an ad |
google_ads_enable_ad | Enable a paused ad |
google_ads_delete_ad | Remove an ad |
| Tool | Description |
|---|---|
google_ads_list_keywords | List keywords with quality score and metrics |
google_ads_add_keywords | Add keywords (BROAD, PHRASE, EXACT) |
google_ads_add_negative_keywords | Add negative keywords to a campaign |
google_ads_pause_keyword | Pause a keyword |
google_ads_remove_keyword | Remove a keyword |
| Tool | Description |
|---|---|
google_ads_campaign_performance | Performance summary across all campaigns |
google_ads_time_series | Daily metrics over a date range |
google_ads_breakdowns | Breakdowns by device or network |
google_ads_auction_insights | Competitive auction metrics |
google_ads_get_budget | Campaign budget details |
| Tool | Description |
|---|---|
google_ads_keyword_performance | Rank keywords by return — which keywords made the most money |
google_ads_keyword_insights | Full keyword audit in one call: blocking negatives, wasted-spend themes, missing keywords, Quality Score premiums, budget vs Ad Rank caps, duplicates |
google_ads_ad_performance | Rank ads by return — which ad copy actually converts |
google_ads_search_terms | What people actually searched, what it cost, and which terms spent with nothing to show |
google_ads_conversion_health | Check conversion tracking is working before trusting any CPA or ROAS |
google_ads_conversion_funnel | Which keywords or campaigns produce the event the business is actually paid on, not just form fills — essential when offline conversions are imported |
google_ads_recent_changes | Who changed what recently — most sudden shifts are something someone did |
| Tool | Description |
|---|---|
meta_ads_list_accounts | List all Meta ad accounts |
meta_ads_list_campaigns | List campaigns with metrics |
meta_ads_get_campaign | Get detailed campaign info |
meta_ads_create_campaign | Create a campaign (created PAUSED) |
meta_ads_update_campaign | Update name, budget, or status |
meta_ads_pause_campaign | Pause a campaign |
meta_ads_resume_campaign | Activate a paused campaign |
meta_ads_delete_campaign | Delete a campaign |
| Tool | Description |
|---|---|
meta_ads_list_ad_sets | List ad sets with targeting and metrics |
meta_ads_create_ad_set | Create ad set with targeting options |
meta_ads_update_ad_set | Update name, budget, or status |
meta_ads_pause_ad_set | Pause an ad set |
meta_ads_delete_ad_set | Delete an ad set |
| Tool | Description |
|---|---|
meta_ads_list_ads | List ads with creative details and metrics |
meta_ads_create_ad | Create ad with copy, image, and CTA |
meta_ads_pause_ad | Pause an ad |
meta_ads_enable_ad | Activate a paused ad |
meta_ads_delete_ad | Delete an ad |
| Tool | Description |
|---|---|
meta_ads_search_interests | Search targeting interests and behaviors |
meta_ads_list_audiences | List custom audiences |
meta_ads_list_pages | List your Facebook pages |
meta_ads_update_targeting | Update ad set targeting |
| Tool | Description |
|---|---|
meta_ads_campaign_performance | Performance summary across campaigns |
meta_ads_time_series | Daily performance time series |
meta_ads_breakdowns | Breakdowns by device, platform, age, gender |
meta_ads_creative_performance | Rank ads by return — which creative made money, and which spent for nothing |
| Tool | Description |
|---|---|
account_review | One call for "how are we doing". Leads with how much a month is at risk across Google and Meta, then splits it: money that bought nothing, spend well above the account's own CPA, and growth left on the table |
campaign_diagnosis | Why performance moved: compares the window against the one before and attributes the change |
list_connected_platforms | Which ad platforms are connected and ready to use |
Performance Review
"How are my Google Ads campaigns performing this month? Show me the ones with ROAS below 2x."
Campaign Management
"Create a new Meta traffic campaign called 'Summer Sale 2026' with a $75/day budget targeting ages 25-45 in the US."
Keyword Optimization
"Show me keywords in my 'Brand Terms' ad group. Pause any with quality score below 5."
Budget Control
"Increase the budget on my top-performing campaign by 20% and pause the one that's losing money."
The MCP server gives you full campaign management from chat. The Adrex AI Platform adds:
MIT License — see LICENSE for details.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y adrex-aiMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-gauravapiscean-adrex-ai": {
"command": "npx",
"args": [
"-y",
"adrex-ai"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceAdrex AI works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.