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.

Every Adwarp release, newest first.

Adwarp is an open-source MCP server and CLI for LinkedIn Ads and Google Ads that runs from your terminal. Each release ships to npm, the official MCP Registry and GitHub, and lands here the same day.

Latest releasev0.4.0

Install or update

$ claude mcp add adwarp -- npx -y adwarp mcp

Read the docs

  1. v0.4.0Latest

    Released

    Adwarp 0.4.0

    Adwarp can now build LinkedIn matched audiences straight from HubSpot, the same way it already does from Salesforce.

    HubSpot audiences

    • New MCP tool audience_from_hubspot and CLI command adwarp audience from-hubspot. Point it at a HubSpot list or a set of property filters, pick contacts or companies, and it uploads the result as a LinkedIn matched audience.
    • It reads HubSpot with a private app token you create in your own HubSpot account, with read-only scopes for contacts, companies and lists. Put the token in ~/.adwarp/hubspot.json or ADWARP_HUBSPOT_TOKEN.
    • Contacts go through the same cleaning as CSV uploads, and only SHA-256 hashes of the emails leave your machine. --dry-run shows the counts and a masked sample, and uploads nothing.
    • It runs locally only. The hosted endpoint doesn't register it.
    • Setup and examples: https://adwarp.dev/docs/hubspot

    Docs and the hosted endpoint

    • The docs now live at https://adwarp.dev/docs, with new setup pages for Claude Code, Claude Desktop, Codex, Cursor and the CLI, and a LinkedIn Ads overview.
    • docs/tools.json now marks the tools that need your machine (CSV and Salesforce uploads, HubSpot audiences and the change journal) as not hosted.
    • The hosted app at mcp.adwarp.dev is now just the MCP endpoint. Its old pages redirect to adwarp.dev, and https://mcp.adwarp.dev/api/mcp works as before.

    Other changes

    • Company list uploads now check LinkedIn's 300,000 row limit, as contact lists already did.
    • docs/tools.json lists 37 tools: 28 for LinkedIn Ads and 9 for Google Ads.
  2. v0.3.0

    Released

    Adwarp 0.3.0

    Adwarp can now pause, resume and archive a single LinkedIn ad, without touching the rest of its ad group.

    What changed

    • New MCP tool update_ad sets an ad's status to PAUSED, ACTIVE or ARCHIVED. It accepts a numeric creative id or a full urn:li:sponsoredCreative, and it works on the hosted endpoint too. The status is required, so leaving it out can never switch an ad on.
    • New CLI commands adwarp ad pause <creativeId>, adwarp ad resume <creativeId> and adwarp ad archive <creativeId>. Each previews the change and sends it only with --apply. Resume says that it starts spend, and warns when the ad is still a draft.
    • The change journal now records ads by their numeric id, so adwarp lift creative <id> finds ad creations and status changes.
    • docs/tools.json lists 36 tools, 27 of them on the hosted endpoint.

    Setting an ad to ACTIVE starts spend, so your assistant does it only when you explicitly ask. An active ad serves only while its ad group is active, and LinkedIn refuses to pause an ad that is still in review.

  3. v0.2.0

    Released

    Adwarp 0.2.0

    Liam is now Adwarp, the open-source ad agent for LinkedIn Ads and Google Ads. This is its first release on npm and in the official MCP Registry.

    Install

    • npx -y adwarp --help runs the CLI without installing anything.
    • claude mcp add adwarp -- npx -y adwarp mcp registers the local MCP server with Claude Code. Other MCP clients run npx with the arguments -y adwarp mcp.
    • npm install -g adwarp installs the adwarp, adwarp-mcp and liam commands.
    • The Dockerfile at the root of the repo builds an image that runs the MCP server on stdio.

    What changed

    • Commands, the MCP server name, setup prompts and links now say Adwarp. liam keeps working as an alias.
    • Every internal name now says adwarp too: the ~/.adwarp folder, ADWARP_* variables and X-Adwarp-Linkedin-* headers. Your setup carries over unchanged, because the old ~/.liads folder, LIADS_* and GADS_* variables and X-Liads-* headers all still work.
    • The hosted endpoint is https://mcp.adwarp.dev/api/mcp. https://liam-mcp.vercel.app/api/mcp keeps working.
    • The docs live as Markdown in docs/, and docs/tools.json lists all 35 tools and which ones the hosted endpoint serves.
    • Adwarp is listed in the official MCP Registry as io.github.adwarp-dev/adwarp, with the npm package and the hosted endpoint.

    Everything Adwarp creates on LinkedIn starts as a draft and goes live only when you explicitly ask. Google Ads campaigns are created paused and can only be switched on in Google Ads.

Adwarp was called Liam before 0.2.0, and the 0.2.0 release lists every pull request back to the first one.