adwarp

Start with 1 prompt.

Paste it into Claude Code, Codex or Cursor. Your agent installs Adwarp, walks you through your LinkedIn app and checks the connection.

setup prompt
Set up Adwarp for me. It's the open-source ad agent for LinkedIn Ads and Google Ads: https://github.com/adwarp-dev/adwarp

1. Check that Node.js 20 or newer is installed.
2. Walk me through creating my own LinkedIn developer app with the Advertising API product: https://github.com/adwarp-dev/adwarp/blob/main/docs/linkedin-app.md
3. Save the app's client ID and secret to ~/.adwarp/config.json as clientId and clientSecret.
4. Run "npx -y adwarp auth login" and wait while I approve access in my browser.
5. Add Adwarp to the AI client I'm using right now as an MCP server that runs "npx -y adwarp mcp". In Claude Code that's: claude mcp add adwarp -- npx -y adwarp mcp
6. Check the connection by listing my ad accounts, then save the one I pick as defaultAccountId in ~/.adwarp/config.json.

Don't create or change anything in my ad accounts during setup. LinkedIn campaigns start as drafts, so nothing spends until I turn it on.
adwarp
GitHub

Start with 1 prompt.

Paste it into Claude Code, Codex or Cursor. Your agent installs Adwarp, walks you through your LinkedIn app and checks the connection.

setup prompt
Set up Adwarp for me. It's the open-source ad agent for LinkedIn Ads and Google Ads: https://github.com/adwarp-dev/adwarp

1. Check that Node.js 20 or newer is installed.
2. Walk me through creating my own LinkedIn developer app with the Advertising API product: https://github.com/adwarp-dev/adwarp/blob/main/docs/linkedin-app.md
3. Save the app's client ID and secret to ~/.adwarp/config.json as clientId and clientSecret.
4. Run "npx -y adwarp auth login" and wait while I approve access in my browser.
5. Add Adwarp to the AI client I'm using right now as an MCP server that runs "npx -y adwarp mcp". In Claude Code that's: claude mcp add adwarp -- npx -y adwarp mcp
6. Check the connection by listing my ad accounts, then save the one I pick as defaultAccountId in ~/.adwarp/config.json.

Don't create or change anything in my ad accounts during setup. LinkedIn campaigns start as drafts, so nothing spends until I turn it on.

How Adwarp works.

An open-source MCP server and CLI for LinkedIn Ads and Google Ads. It uses your own keys and never launches on its own.

01MCP server and CLI

Same code, 2 ways in. Both share your keys and your change journal.

  • MCP server

    Ask in plain words.

    MCP is the open standard AI clients use to call outside tools. Adwarp's MCP server gives Claude Code, Claude Desktop, Codex and Cursor its 37 tools, and the client picks the calls.

    Best for: Questions, exploring and drafting

    New chat

    You: How did the account do last week?

    Tool call: adwarp performance_summary last_7_days

    Assistant: 14 ads ran in the last 7 days. 3 are under 0.4% click-through rate after 1,500 impressions, and the rest are on pace. Want those 3 as a list?

  • CLI

    Script it and schedule it.

    The adwarp command runs every capability from your terminal with no AI client. Pipe its output into other tools, or let cron run it on a schedule.

    Best for: Scripts, cron jobs and repeatable runs

    terminal ~ cron

    $ crontab -l

    0 9 * * 1 npx adwarp report summary -p last_7_days

    $ npx adwarp report summary -p last_7_days

    14 ads, 1,500+ impressions each

    3 ads under 0.4% click-through rate

Why it gets better results.

  • Questions are instant

    In your AI client, checking performance is 1 question, so it happens daily instead of at month end.

  • Habits run on schedule

    From cron, the weekly report and your rules run every time, with no reminder needed.

  • 1 record of changes

    The local server and the CLI write the same journal, so you can measure which changes moved results.

  • Code you can read

    It's open source, so you can see exactly what it does to your account and change it.

02Local or hosted

Run it locally or on the hosted endpoint. Every tool runs locally, and most LinkedIn tools also run hosted.

  • Local MCP server

    stdio

    Runs on your machine with all 37 tools, including the 9 Google tools, CSV uploads, Salesforce and HubSpot audiences and the change journal.

    Keys stay in ~/.adwarp on your machine.

  • Hosted endpoint

    HTTP

    Connect to https://mcp.adwarp.dev/api/mcp with your own LinkedIn app as request headers. It serves the 28 LinkedIn tools and 0 of the 9 Google tools.

    Keys travel with each request, are used in memory and are never stored.

  • Self-hosted

    Vercel

    Deploy the same endpoint to your own Vercel project, so credentials never touch shared servers. 1 instance can serve a whole team, each on their own LinkedIn app.

    Keys live in your Vercel environment variables.

03Your keys

Your keys, your account, your call. Open source, with every guardrail written in code you can read.

~/.adwarp
  • config.json# your LinkedIn app, readable by you only
  • credentials.json# your LinkedIn sign-in
  • google.json# your Google Ads app and token
  • google-credentials.json# your Google sign-in
  • changelog.jsonl# the change journal, 1 line per change
Everything Adwarp keeps lives in 1 folder on your machine, and none of it goes in the repo.
  • Your own developer apps

    Adwarp connects through apps you create and control: a LinkedIn developer app with the Advertising API, and a Google Ads developer token with an OAuth client.

  • Keys stay with you

    Locally they live in ~/.adwarp. The hosted endpoint takes them per request, uses them in memory and never stores them.

  • Drafts and approvals

    LinkedIn campaigns and ads start as drafts and go live only when you explicitly ask. Google campaigns start paused, and Adwarp has no command to enable them.

  • Every change journaled

    Each create and update is logged with what changed, so you can measure the lift before and after. Changes made in Campaign Manager can be logged too.

  • Skills hold your playbook

    11 agent skills turn the tools into playbooks for reporting, launches and audits. Copy one and add your defaults. Credentials never go in a skill.

  • MIT licensed

    Read every line on GitHub, fork it and self-host it. No account and no sign-up.

04FAQ

Questions, answered. From setup to the details.

Ask on GitHub
What is an MCP server?

MCP, the Model Context Protocol, is the open standard AI clients use to call outside tools. Adwarp's MCP server gives your client its LinkedIn Ads and Google Ads tools, so you can ask in plain words.

Do I need an AI client to use Adwarp?

No. The CLI runs every capability from your terminal on its own, in scripts or on a schedule.

Can I run it in CI or cron?

Yes. Every capability is an adwarp command, so cron, CI or any script can run it. A Monday report is 1 cron line: 0 9 * * 1 npx adwarp report summary -p last_7_days.

Is the hosted endpoint required?

No. The local MCP server and the CLI run entirely on your machine. The hosted endpoint is optional, for clients that connect over HTTP, and it serves the LinkedIn tools only.

Can I use the MCP server and the CLI together?

Yes. They read the same ~/.adwarp folder, so you can draft in Claude Code and schedule the weekly report from cron on the same machine.

When should I use the MCP server or the CLI?

Use the MCP server for questions and the CLI for anything repeatable.

Which way to use for each job
JobUse
Ask how the account is doingMCP server
Size an audience, narrowing as you goMCP server
Draft a campaign from a conversationMCP server
Run the weekly report every MondayCLI, from cron
Launch many ad groups from a brief fileCLI, with launch --brief
Feed results into another toolCLI, with --json where a command offers it
Which tools run on the hosted endpoint?

Most LinkedIn tools. Every tool runs locally, and the hosted endpoint skips anything that needs your machine.

What runs locally and on the hosted endpoint
FeatureLocalHosted
LinkedIn campaigns, targeting and reportingYesYes
Ad Library metadataYesYes
CSV list uploadsYesNo
Salesforce audiencesYesNo
HubSpot audiencesYesNo
Change journal and liftYesNo
Google Ads toolsYesNo
What are the main CLI commands?

Commands for reports, launches, audiences, targeting, competitor ads and lift. Run any of them with npx adwarp, or install the adwarp command once.

The main CLI commands
CommandWhat it does
adwarp report summaryAccount rollup with top performers and flags
adwarp report trendWeekly or monthly trend with deltas
adwarp launch --briefAudience, campaign group, ad group and draft ads from a brief file
adwarp audience uploadClean and upload a CSV as a matched audience
adwarp targeting searchFind titles, seniorities and regions by name
adwarp competitor adsAny company's ads from the LinkedIn Ad Library
adwarp liftBefore and after performance for each recorded change
adwarp google launch --briefA paused Search campaign, dry run unless --apply
What are the agent skills?

11 playbooks for reporting, launches and audits that work over the MCP tools or the CLI.

The agent skills
SkillAsk it
adwarp-spendAnalyze my spend
adwarp-performanceHow are my ads doing?
adwarp-leadsWhich ads drive leads, which don't?
adwarp-competitorsWhat is <company> running?
adwarp-weeklyWeekly snapshot
adwarp-healthAnything on fire?
adwarp-launchLaunch a campaign
adwarp-experimentsDid that change help?
adwarp-audiencesAudit my audiences
adwarp-account-auditIs my account set up right?
adwarp-gads-launchLaunch a Google search campaign for...

Skills docs

Can I self-host the endpoint?

Yes. Deploy the same endpoint to your own Vercel project in 4 steps, so credentials never touch shared servers.

  1. Print your environment values with npx -y adwarp auth export.
  2. Deploy apps/web from the repo to Vercel.
  3. Add the printed variables and a strong MCP_AUTH_TOKEN in the project settings.
  4. Connect your client to your-app.vercel.app/api/mcp with the token as a Bearer header.

Self-host guide