Repository navigation
Releases: adwarp-dev/adwarp
Release list
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_hubspotand CLI commandadwarp 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.jsonorADWARP_HUBSPOT_TOKEN. - Contacts go through the same cleaning as CSV uploads, and only SHA-256 hashes of the emails leave your machine.
--dry-runshows 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.jsonnow 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/mcpworks as before.
Other changes
- Company list uploads now check LinkedIn's 300,000 row limit, as contact lists already did.
docs/tools.jsonlists 37 tools: 28 for LinkedIn Ads and 9 for Google Ads.
What's Changed
- Send the endpoint's homepage to adwarp.dev and fix its tab by @stan-rym in #42
- Docs: client setup pages, LinkedIn Ads overview and copy fixes by @stan-rym in #43
- Endpoint-only hosted app and links to adwarp.dev by @stan-rym in #44
- HubSpot audiences by @stan-rym in #45
- Release 0.4.0 by @stan-rym in #46
Full Changelog: v0.3.0...v0.4.0
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_adsets an ad's status toPAUSED,ACTIVEorARCHIVED. It accepts a numeric creative id or a fullurn: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>andadwarp 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.jsonlists 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.
What's Changed
- Release: wait for the new npm version before publishing to the MCP Registry by @stan-rym in #39
- Pause and resume single ads by @stan-rym in #40
- Release 0.3.0 by @stan-rym in #41
Full Changelog: v0.2.0...v0.3.0
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 --helpruns the CLI without installing anything.claude mcp add adwarp -- npx -y adwarp mcpregisters the local MCP server with Claude Code. Other MCP clients runnpxwith the arguments-y adwarp mcp.npm install -g adwarpinstalls theadwarp,adwarp-mcpandliamcommands.- 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.
liamkeeps working as an alias. - Every internal name now says adwarp too: the
~/.adwarpfolder,ADWARP_*variables andX-Adwarp-Linkedin-*headers. Your setup carries over unchanged, because the old~/.liadsfolder,LIADS_*andGADS_*variables andX-Liads-*headers all still work. - The hosted endpoint is
https://mcp.adwarp.dev/api/mcp.https://liam-mcp.vercel.app/api/mcpkeeps working. - The docs live as Markdown in
docs/, anddocs/tools.jsonlists 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.
What's Changed
- Salesforce → audience loop + conversion selection by @stan-rym in #1
- Redesign the hosted app homescreen by @stan-rym in #2
- Performance reporting + insights by @stan-rym in #3
- Auto-clean CSVs on audience upload (contact + company) by @stan-rym in #5
- Add ROADMAP.md by @stan-rym in #6
- Keep LinkedIn company page URL in company matched-audience uploads by @stan-rym in #7
- Add ENGAGEMENT objective; force Audience Expansion + Audience Network off by @stan-rym in #8
- Auto-apply default audience exclusions and default conversion by @stan-rym in #10
- Competitor ad intelligence: read any company's ads from the LinkedIn Ad Library by @stan-rym in #11
- Add change journal and lift comparison by @stan-rym in #12
- fix(creatives): send landing page, CTA, and headline on image ads by @stan-rym in #13
- feat: list campaigns (drafts included), delete ads, retry transient createInline 404s by @stan-rym in #14
- Public-readiness docs + Ad Library rate-limit handling by @stan-rym in #16
- Document the two ways to use Liam: CLI and MCP by @stan-rym in #17
- One-prompt setup and an FAQ on the landing page by @stan-rym in #18
- README: two explicit install paths (MCP server and terminal CLI) by @stan-rym in #19
- Six portable analysis skills on top of Liam by @stan-rym in #20
- Hosted MCP: bring your own credentials (multi-tenant) by @stan-rym in #21
- fix(creatives): URL-encode creative URN in setCreativeStatus by @stan-rym in #15
- Docs page and nav button mirroring the repo README by @stan-rym in #22
- Add Vercel Analytics to the site and the hosted MCP server by @stan-rym in #23
- Harden hosted MCP auth: header-only, timing-safe, fail closed by @stan-rym in #24
- Support multiple default conversions on new campaigns by @stan-rym in #25
- Add update_campaign: patch existing ad-set targeting and fields by @stan-rym in #26
- Add Terms of Service and Privacy Policy pages by @stan-rym in #27
- Pace the Ad Library scraper so it cannot get the user's IP blocked by @stan-rym in #29
- Google Ads: paused-only Search campaign creation, keywords, and reporting by @stan-rym in #28
- Isolate competitor creative collection in a remote worker by @stan-rym in #30
- Expose ad rotation (creativeSelection) on campaigns by @stan-rym in #31
- Add optimizationTargetType and costType to campaign create/update by @stan-rym in #32
- Rename Liam to Adwarp in everything users see by @stan-rym in #33
- Move docs to Markdown and generate tools.json by @stan-rym in #34
- Publishable adwarp npm package (CLI and MCP server) and a root Dockerfile by @stan-rym in #35
- Release workflow: npm, GitHub release, MCP Registry and website rebuild by @stan-rym in #36
- Rename internal names to adwarp, keep every old name working by @stan-rym in #37
- Rename the skills to adwarp-*, keep the old names as links by @stan-rym in #38
New Contributors
Full Changelog: https://github.com/adwarp-dev/adwarp/commits/v0.2.0