Skip to content
Agentmart
Submit a tool

Adwarp

Open-source ad agent for LinkedIn Ads and Google Ads.

Connector by adwarp-dev · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)Remote (HTTP)★ 23
Write a review

Install

Works with Claude Code, VS Code, Codex, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/adwarp-dev-adwarp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://mcp.adwarp.dev/api/mcp Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Open-source ad agent for LinkedIn Ads and Google Ads. Drafts campaigns, audiences and reports.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
19 read · 10 write · 1 delete · 7 not yet classified
Secrets
4 (API keys, tokens or passwords)
Install scripts
None found
Runs as
Node.js package

Tools by what they do 37

Read from the source code; the running server may list different tools.

Read 19 · Look things up without changing anything.

  • compute_lift
  • estimate_audience
  • gads_list_accounts
  • gads_list_ads
  • gads_list_campaigns
  • gads_list_client_accounts
  • gads_list_conversion_actions
  • get_audience_status
  • get_competitor_creatives
  • get_performance
  • inspect_competitor_ads
  • list_ad_accounts
Show 7 more tools
  • list_ad_changes
  • list_ads
  • list_campaigns
  • list_conversions
  • list_facet_entities
  • list_targeting_facets
  • search_targeting

Write 10 · Create, change, send or run things.

  • audience_from_hubspot
  • audience_from_salesforce
  • create_campaign
  • create_campaign_group
  • create_image_ad
  • create_text_ad
  • log_ad_change
  • update_ad
  • update_campaign
  • upload_audience_csv

Delete 1 · Delete, drop, revoke or wipe things.

  • delete_ad

Not yet classified 7 · We could not tell from the name and description.

  • gads_keyword_ideas
  • gads_launch_search_campaign
  • gads_performance
  • gads_search
  • launch_from_brief
  • performance_summary
  • performance_trend

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • ADWARP_LINKEDIN_CLIENT_SECRET
  • ADWARP_LINKEDIN_REFRESH_TOKEN
  • X-Adwarp-Linkedin-Client-Secret
  • X-Adwarp-Linkedin-Refresh-Token

Other settings (environment variables or headers).

  • ADWARP_LINKEDIN_CLIENT_ID
  • ADWARP_LINKEDIN_DEFAULT_ACCOUNT_ID
  • X-Adwarp-Linkedin-Account-Id
  • X-Adwarp-Linkedin-Client-Id
  • X-Adwarp-Linkedin-Version

Network hosts it talks to 10

  • accounts.google.com · found in code
  • ads.google.com · found in code
  • adwarp.dev · found in code
  • api.hubapi.com · found in code
  • github.com · found in code
  • googleads.googleapis.com · found in code
  • googleapis.com · found in code
  • mcp.adwarp.dev · found in remote endpoint, install command, code
  • oauth2.googleapis.com · found in code
  • openapi.vercel.sh · found in code

Files it touches

  • Your home directory (~)

Tools (37)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • audience_from_hubspot

    Build a matched audience from HubSpot contacts or companies. Pass exactly 1 source: a HubSpot listId (its members), or filters for a CRM search (all ANDed). Reads every page, cleans the records like a CSV upload, and uploads only SHA256 email hashes for contacts (name and website for companies). Pass dryRun=true first: it returns counts and a masked sample and uploads nothing. Needs a HubSpot private app token on this machine (ADWARP_HUBSPOT_TOKEN or ~/.adwarp/hubspot.json); matching takes up to 48h.

  • audience_from_salesforce

    Build a matched audience from a Salesforce SOQL query that selects an email column. Closes the loop: flagged accounts/contacts -> DMP segment. Requires the local `sf` CLI to be authenticated.

  • compute_lift

    For each recorded change to an entity, compare performance in the window before the change against the window after it (default 14 days each side). Returns before/after KPI windows and per-metric relative deltas (CTR, CPC, conversion rate, cost-per-conversion, etc.). This is a directional pre/post comparison, NOT a controlled experiment. It is confounded by seasonality, the LinkedIn learning phase after edits, and concurrent budget changes; present it as a signal and call out partial after-windows on recent changes.

  • create_campaign

    Create a campaign (the 'ad group') with targeting, budget, bid or bidding strategy (optimizationTargetType MAX_CLICK = Maximum Delivery on landing page clicks), schedule, and optional ad rotation (creativeSelection: OPTIMIZED or ROUND_ROBIN = rotate ads evenly). Defaults to DRAFT.

  • create_campaign_group

    Create a campaign group (the top-level 'campaign'). Defaults to DRAFT.

  • create_image_ad

    Create a single-image Sponsored Content creative (DRAFT). Omit imagePath to leave the campaign ready for an image later.

  • create_text_ad

    Create a Text Ad creative (DRAFT by default).

  • delete_ad

    Delete an ad: removes the creative and (best-effort) the Direct Sponsored Content post behind it. Accepts a numeric creative id or a full urn:li:sponsoredCreative URN. Use for cleaning up drafts or replacing an ad whose copy must change (Campaign Manager's editor does not reflect post edits, so recreate instead).

  • estimate_audience

    Estimate audience size for a structured targeting spec (facet short name -> entity URNs). A campaign needs >=300 members to serve.

  • gads_keyword_ideas

    Keyword research: search volume, competition, and top-of-page bid range for seed terms and/or a landing page. The sizing step before committing budget, equivalent to estimating audience reach on LinkedIn.

  • gads_launch_search_campaign

    Create a PAUSED Search campaign from a brief: budget, campaign, geo/language targeting, ad groups, keywords, and responsive search ads, all in one atomic mutate. Defaults to validateOnly=true, which asks Google to validate the whole batch and persist nothing. Show the returned plan to the user and only re-call with validateOnly=false after they confirm. House rules are applied automatically and cannot be overridden: search network only (display expansion and search partners off), physical-presence-only location targeting, and Manual CPC. Nothing created here can serve. Activation is a human st…

  • gads_list_accounts

    List every Google Ads customer this login can reach. Run this first: it proves the OAuth client, developer token, and account access all work.

  • gads_list_ads

    Ads in an ad group, with their responsive-search headlines and descriptions.

  • gads_list_campaigns

    Account structure: campaigns with their ad groups nested. Paused campaigns are included.

  • gads_list_client_accounts

    List the client accounts under a Google Ads manager (MCC) account.

Show 22 more tools
  • gads_list_conversion_actions

    Conversion actions on the account, so a launch can name one instead of guessing an id.

  • gads_performance

    Performance rows at campaign, ad_group, ad, keyword, or search_term level, with totals and derived KPIs (CTR, CPC, CPM, conversion rate, cost per conversion).

  • gads_search

    Run a raw GAQL query against the account. Read-only escape hatch for anything the other tools do not cover.

  • get_audience_status

    Check a DMP segment's matching status and resolved size.

  • get_competitor_creatives

    Read remote creative job status and cached copy by ad IDs. Read-only: does not enqueue work or visit LinkedIn. Screenshots are available through the authenticated worker endpoint.

  • get_performance

    Per-entity performance with derived KPIs (CTR, CPC, CPM, CPL, conversion rate). level: campaign_group (campaign), campaign (ad group), or creative (ad). Pass parentId to scope campaigns to a group or creatives to a campaign.

  • inspect_competitor_ads

    Discover competitor ads through the official API. auto optionally queues up to 10 creatives on the remote worker; api returns metadata only. Always provide advertiser plus companyId to filter unrelated name matches before collection. No local browser or scraper fallback. Read pending results with get_competitor_creatives. Cached screenshots require worker authentication. Report sample coverage and collection dates; never retry a blocked worker or use another browser/client. Synthesize findings rather than dumping rows.

  • launch_from_brief

    End-to-end: optional audience upload -> campaign group -> campaign -> draft creatives. Everything DRAFT. Returns Campaign Manager review links.

  • list_ad_accounts

    List LinkedIn ad accounts this app can access.

  • list_ad_changes

    List recorded ad changes (newest first) from the local change journal. Filter by entity type/id or tag. Use this to see what's been changed before computing lift.

  • list_ads

    List the creatives (ads) in a campaign (ad group), drafts included: id, name, status, and backing post urn.

  • list_campaigns

    List the account structure: campaign groups (campaigns) and/or their campaigns (ad groups), DRAFTS INCLUDED, unlike performance reports, which only show entities with spend. Pass level=groups for campaign groups only, level=campaigns for ad groups (optionally scoped by groupId), or level=both (default) for the full tree.

  • list_conversions

    List the account's existing conversions (insight tags) so you can select one to track on a campaign. Pass accountId or omit to use the default.

  • list_facet_entities

    List all entities of a small facet (e.g. seniorities, functions, degrees) to pick URNs from.

  • list_targeting_facets

    Description is built at runtime.

  • log_ad_change

    Record a change to an ad entity in the local change journal, so a later lift report can compare performance before vs. after it. Adwarp logs its own changes automatically. Use this for changes made elsewhere (e.g. in Campaign Manager) or to attach a hypothesis/label. Provide field+after for a field change, or note for a freeform annotation.

  • performance_summary

    Account performance rollup over a period: totals + KPIs, top campaigns by spend/CTR, worst by cost-per-conversion, and flagged campaigns (spend with no conversions, high CPC, low CTR). Start here for 'how are my ads doing'.

  • performance_trend

    Weekly or monthly trend for one entity, with period-over-period deltas on impressions, clicks, spend, conversions, and CTR. Use to spot momentum or creative fatigue.

  • search_targeting

    Typeahead-search entities within a facet to get their URNs (e.g. facet='titles', query='marketing' -> Marketing Manager urn). Use 'list_facet_entities' for small fixed sets like seniorities. These URNs go into a targeting spec.

  • update_ad

    Change a single ad's (creative's) status in place: PAUSED stops it serving, ACTIVE starts it serving, ARCHIVED retires it. Use PAUSED to stop an ad without touching the rest of its ad group. Accepts a numeric creative id or a full urn:li:sponsoredCreative URN. Setting ACTIVE starts spend, so set it only when the user explicitly asks to turn the ad on, never as a side effect of another request. An ACTIVE ad still only serves while its campaign (ad group) is ACTIVE. LinkedIn refuses to pause an ad that is still in review. Pass dryRun=true to preview the patch without sending it.

  • update_campaign

    Update an existing campaign (the 'ad group') in place: change its targeting and/or name, status, budget, bid, bidding strategy (optimizationTargetType, costType), schedule, ad rotation (creativeSelection: OPTIMIZED or ROUND_ROBIN = rotate ads evenly). Only the fields you pass change. Targeting is REPLACED when you pass any targeting form: a structured `targeting` spec, the `audienceSegmentUrn` (+ optional `geoUrns`) shorthand, or a raw `targetingCriteria`, and default exclusions are re-applied unless applyDefaultExclusions=false. Audience Expansion / Audience Network stay off. Pass dryRun=true…

  • upload_audience_csv

    Clean a CSV at csvPath and upload it as a matched-audience DMP segment. Auto-detects contact (email, or first and last name) vs company (account) lists, normalizes column names, drops non-matcher columns, hashes emails, and converts company domains to website URLs. Contact lists keep first name, last name, company, title and country for LinkedIn's people match, which raises the match rate on work emails; a row with no valid email but a first and last name matches on name. Requires the Audiences product; matching takes up to 48h.

Signals

Stars
23
Forks
1
Open issues
0
Last commit
Oct 23, 2026 (5 days ago)
Last release
Oct 19, 2026 (10 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.adwarp-dev/adwarp
Version
0.4.0
Auth
API key
Packages
npm adwarp
License
MIT
Website
adwarp.dev
First seen
Oct 24, 2026
Last checked
Oct 25, 2026
Cite this page

Adwarp MCP server. Agent Mart. https://agentmart.dev/connectors/adwarp-dev-adwarp (last updated 2026-10-25)