I built an MCP wrapper for the ChatGPT Ads Manager so I can run ads without touching the dashboard

89 tools, one npx command. Campaigns, ad groups, audiences, conversions, insights — all from your agent's chat.

If you've been running ads on ChatGPT (which, honestly, is turning into one of the more interesting ad platforms out there), you know the drill: create a campaign, set up an ad group, upload creative, check reviews, pull reports. It's a lot of clicking around the Ads Manager dashboard.

I got tired of the manual grind, so I built something to fix it.

What is this thing?

It's an MCP (Model Context Protocol) server that wraps the entire ChatGPT Ads Manager API into tools your agent can call directly. Campaigns, ad groups, ads, audiences, conversion pixels, product feeds, lead forms, business agents, geo targeting, insights — across 89 tools covering the full advertiser surface.

The idea is simple: instead of tabbing through the dashboard to set up a campaign, you tell your agent what you want, and it does the work. The agent creates the campaign, returns the ID, feeds it into the ad group, uploads the creative, and activates everything — all in one conversation.

It's published on npm, so there's nothing to install beyond what you already have. One npx command.

How it works

You set one env variable — your OpenAI Advertiser API key (looks like sk-ads-..., from Ads Manager → Settings → API Keys) — paste a 10-line JSON config into your MCP client, and restart. That's it.

Your key stays local on your machine. No proxy, no telemetry, no external service. The npx process calls api.ads.openai.com directly from your terminal.

Things you can ask it

Here's the kind of stuff that actually comes up in a work day:

"Create a paused campaign called Fall Launch with a $50/day budget, then an ad group with impression bidding, then a chat_card ad for it."

The agent chains everything — campaign_id flows into ad_group_id flows into ad_id. One prompt, entire hierarchy created.

"Get last 30 days of ad account insights, breakdown by country."

Goodbye CSV exports and pivot tables. Pulls campaign, ad group, and ad-level insights with segment breakdowns (country, device, product) and time ranges.

"Upload this image and create an ad preview so I can QA it."

Paste a URL or base64 image, the tool uploads it to Ads Manager and generates a preview iframe. No more download-upload-refresh cycles.

"Set up a conversion pixel called 'Checkout', create an API key for it, and configure the event setting."

Conversions setup used to be a multi-tab nightmare. Now it's a sentence.

"Search geo for 'New York' and target those locations in my campaign."

Geo lookup returns location IDs you feed directly into campaign targeting. No copying IDs from documentation.

The tool surface (yes, it's extensive)

89 tools across 14 categories. The full list is on the GitHub README, but the highlights:

Ad account management, campaigns, ad groups, ads (create, update, preview, pause, archive — full lifecycle), insights & reporting (account/campaign/ad group/ad/conversion level, with segment breakdowns), files & creative uploads, custom audiences (CRUD + member management + merge), business agents & lead forms (create → publish → preview flow), conversion pixels & API keys, product feeds (query, patch, SFTP access), geo targeting, spend limit windows, and a create_campaign_hierarchy tool that chains campaign → ad group → ad in one call.

Get started

You need Node.js 18+ (check with node -v) and an OpenAI Ads API key from ads.openai.com → Settings → API Keys.

Then paste this into your MCP client config (Claude Desktop, Cursor, VS Code, Windsurf — they all work):

{
  "mcpServers": {
    "chatgpt-ads-manager": {
      "command": "npx",
      "args": ["-y", "chatgpt-ads-manager-mcp@latest"],
      "env": {
        "OPENAI_ADS_API_KEY": "sk-ads-..."
      }
    }
  }
}

Restart your agent and you're live.

Try it out

The repo is at github.com/niyogi/chatgpt-ads-manager-mcp. The npm package is chatgpt-ads-manager-mcp — pull it with npx, no git clone needed.

If you're running ads on ChatGPT and already use Claude, Cursor, or any MCP-capable agent, this will save you a genuinely annoying amount of clicking. The agent does the chaining. You just tell it what you want.

Give it a shot. Issues and PRs welcome on GitHub.

No comments yet