3Connect · Talk · Review

How Ad Uploader works

Three steps from a Google Drive folder to paused ad sets in Meta Ads Manager. You stay in Claude or Codex the whole time.

STEP 1

Connect

Connect Facebook and add Ad Uploader to Claude or Codex. One command.

  1. 1Start your free trial and click Connect Facebook on the connect page. It's Meta's own login; we never see your password.
  2. 2Optional: connect Google Drive so Claude can read private folders. Without it, share folders as "Anyone with the link".
  3. 3Add Ad Uploader to your AI client with the one-liner below. The first time you use it, Claude opens a sign-in window.
claude mcp add --transport http ad-uploader https://app.aduploader.com/api/mcp
STEP 2

Talk

Give Claude a Google Drive link and the brief: campaign, ad sets, budget, copy.

Claude
Take the ads in this Drive folder and add them to Spring Sale as new ad sets, 5 per set, $50/day
drive.google.com/drive/folders/1AbC…
ad-uploader · whoami → list_campaigns → get_account_defaults

Found the Spring Sale campaign in your Acme Store account. I'll use your saved page, naming pattern and UTMs. Importing the folder now.

ad-uploader · import_media → get_import_status
Imported 24 files → 12 ads
  • hook1_4x5.mp4 + hook1_9x16.mp4 + hook1_thumb.jpg  → 1 ad
  • hook2_4x5.mp4 + hook2_9x16.mp4                    → 1 ad
  • …
STEP 3

Review

See exactly what will be created, say yes, then flip it on in Ads Manager when you're ready.

Claude
ad-uploader · preview_launch
LAUNCH PREVIEW — nothing has been created yet
Account: Acme Store (act_123) · USD
Campaign: Spring Sale (existing, ABO)
Status on creation: PAUSED (nothing spends until you activate)
Page: Acme Store

Ad sets: 3 (3 new)
  1. Spring Sale | Set | 01  — Broad US 18–65 · $50.00/day  (5 ads)
       • Spring Sale | hook1 | 01   ← hook1 [4x5 + 9x16] +thumb (video)
       • Spring Sale | hook2 | 02   ← hook2 [4x5 + 9x16] (video)
       • …
  2. Spring Sale | Set | 02  — Broad US 18–65 · $50.00/day  (5 ads)
  3. Spring Sale | Set | 03  — Broad US 18–65 · $50.00/day  (2 ads)

Copy:
  Primary text: Spring Sale is on. 30% off everything this week.
  Headline: 30% off sitewide
  CTA: SHOP_NOW → acmestore.com/spring?utm_source=meta
Advantage+ creative: all enhancements off

Totals: 3 ad sets · 12 ads · $150.00/day

Want me to create these?

yes
ad-uploader · launch → get_job
Launch job_51ad: Done
  Campaign: Spring Sale
  Ad sets created: 3/3  ·  Ads created: 12/12  ·  Status: PAUSED
  Daily budget: $150.00
  Review in Ads Manager: business.facebook.com/adsmanager/…
  Everything is paused. Say which ad sets to activate and I'll switch them on.

Briefs it understands

"as new ad sets, 5 per set"

Creates as many new ad sets as needed, five ads in each.

"8 ad sets"

Creates eight new ad sets and divides the ads between them.

"into the Broad AU ad set"

Adds the new ads to an ad set that already exists.

"same targeting as Prospecting US"

Uses an existing ad set as the template for targeting.

"$50/day"

Sets the daily budget on each new ad set. Budgets over your saved cap need a second yes.

"make it live"

The only way ads start as active. Leave status out and everything is created paused.

Install in your client

The same server works everywhere: https://app.aduploader.com/api/mcp. Your first request opens a sign-in window.

Claude Code

Run this in your terminal.

claude mcp add --transport http ad-uploader https://app.aduploader.com/api/mcp

Claude Desktop & claude.ai

Settings → Connectors → Add custom connector, then paste the URL. Claude's Free plan allows one custom connector.

https://app.aduploader.com/api/mcp

Codex

Add this to ~/.codex/config.toml.

[mcp_servers.ad-uploader]
url = "https://app.aduploader.com/api/mcp"

Cursor

Add this to ~/.cursor/mcp.json (or .cursor/mcp.json in a project).

{
  "mcpServers": {
    "ad-uploader": { "url": "https://app.aduploader.com/api/mcp" }
  }
}