Manage LinkedIn campaigns from your terminal.
Adwarp is an open-source MCP server and CLI that turns 1 ask, or 1 brief file, into LinkedIn campaign groups, ad groups and ads with budgets, schedules and conversions attached. Everything lands as a draft, and nothing goes live until you explicitly ask.
$ claude mcp add adwarp -- npx -y adwarp mcp$ npx adwarp launch --brief revops-vp.json
adwarp.create_campaign_group "RevOps VP Q4": DRAFT
adwarp.create_campaign 50 USD/day, Demo booked conversion: DRAFT
adwarp.create_text_ad 3 variants: DRAFT
Created 1 campaign group, 1 ad group and 3 ads, all drafts.
Review links printed for Campaign Manager. 0 USD spent.
01What you can ask
What you can ask. Real requests, answered from your terminal.
$ claude
> Launch 1 ad group per persona for each competitor, 50 USD a day.
adwarp.create_campaign_group 5 competitors: DRAFT
adwarp.create_campaign 35 persona ad groups, 50 USD/day: DRAFT
3 persona audiences under 300 members, skipped
35 ad groups and 35 ads drafted. 0 USD spent.
02How it works
How it works.
Brief
Describe the campaign in plain words or in a brief file: audience, budget, schedule, conversion and copy.
Draft
Adwarp creates the campaign group, the ad groups and the ads as drafts, each ad group with its own budget and audience.
Go live
Review it in Campaign Manager, then switch it on there or ask Adwarp to set it ACTIVE.
03Results
Why it gets better results.
More variants tested
Launching an ad group costs 1 line instead of 20 clicks, so more audiences and messages get tried.
A clean read on each
Every ad group gets its own budget and audience, so each result stands on its own.
Nothing live by accident
Everything lands as a draft, and going live is always an explicit request.
In practice35 ad groups and 35 draft ads from 1 brief in a single run, and 14 drafts switched live at 9am by a one-time job, since LinkedIn ads can't carry a start date of their own.
Can I launch many ad groups at once?
Yes. Ask for every combination of audience and message, and Adwarp drafts each one as its own ad group with its own budget. 1 brief has produced 35 ad groups in a single run.
How do budgets and bids work?
Each ad group carries its own daily or total budget and its own bid or bidding strategy, such as Maximum Delivery or a manual bid. Change them later with update_campaign, which shows you the change before it sends it.
Does anything go live on its own?
No. Campaign groups, ad groups and ads are created as drafts. Adwarp sets them ACTIVE only when you explicitly ask, or you switch them on in Campaign Manager.
How do LinkedIn's names compare with other ad platforms?
They sit 1 level off, which trips up everyone the first time: a LinkedIn campaign group is what other platforms call a campaign, and a LinkedIn campaign is their ad group.
| Other platforms | What it holds | |
|---|---|---|
| Campaign | Campaign group | Status and the total budget |
| Ad group | Campaign | Targeting, budget, bid, schedule and format |
| Ad | Creative | The ad people see |
| Audience | Matched audience | A contact or company list you upload |
Can I schedule start dates?
Yes, on campaign groups and ad groups. Ads can't carry their own start date.
Give the campaign group or the ad group a run schedule when you create it, or change it later with update_campaign. To start ads at a set time, schedule their ad group, or have a one-time job run this command when the time comes.
npx adwarp campaigns update <campaignId> --status ACTIVE --apply
Which tools and commands does it use?
11 MCP tools and 4 CLI commands, with what each one does.
| Tool | What it does |
|---|---|
create_ | Create a campaign group, as a draft |
create_ | Create an ad group with targeting, budget, bid and schedule, as a draft |
create_ | Create a text ad, as a draft |
create_ | Create a single-image ad, as a draft |
launch_ | Audience, campaign group, ad group and ads in 1 call |
update_ | Change budget, bid, schedule, targeting, rotation or status, with a dry run first |
update_ | Pause, resume or archive a single ad, with a dry run first |
list_ | Campaign groups and ad groups, drafts included |
list_ | The ads in an ad group, drafts included |
delete_ | Remove an ad, for example to replace its copy |
list_ | Pick the conversion each ad group tracks |
CLI
npx adwarp launch --brief brief.jsonnpx adwarp campaigns listnpx adwarp campaigns update <campaignId> --daily-budget <amount>npx adwarp ad list <campaignId>
What are the limits?
3 things to know before you start.
- Text ads and single-image ads today.
- The format is set when the ad group is created and can't be changed after.
- LinkedIn ignores edits to a live ad's post, so copy changes go out as a new draft.