Adwarp
NPM · ADWARP · 2 COMPONENTS
Open-source ad agent for LinkedIn Ads and Google Ads. Drafts campaigns, audiences and reports.
Available components
Last scanned (5 hours ago)
Scores higher than 44% of npm servers
Category Marketing and SEO
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security81
- No malware found by supply-chain analysis.Pass
- CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
- No install/post-install scripts declared.Pass
- 32 of 105 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to adwarp-dev/adwarp). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 6 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability60
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 4568 tokens (~123/item across 37 items; 37 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management20
- Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage82
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 46% of tool parameters carry a description.Partial
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_ad" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 37 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 24 Oct 26 −1
- CVE-2023-54404 affects this package: high ▼ security
- 21 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 20 Oct 26 +8
- CVE-2026-85063 affects this package: medium ▼ security
- Known CVEs: unverified → fail ▼ security
- Dependency health: unverified → 0.86 ▲ functional
- 19 Oct 26 64
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 25 Oct 2026 · Analysed npm/adwarp@0.4.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | adwarp-dev/adwarp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/adwarp-dev/adwarp/.github/workflows/release.yml@refs/tags/v0.4.0 |
| Rekor log index | 3318824565 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:0ea15083e6088fe5b5bacb871e44c9dd9be02cbba8a76161198ebfb7e3b22e8dd57aa1b6a5ab944b5eab0a644ac8a8c32b3dc7923f91ec805957d74fe |
Background: How many MCP packages publish verified provenance →
Vulnerabilities 2 findings
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-8cw4-87c7-c6xx | CVE-2026-85063 | medium | yes | |
| GHSA-mrhx-c7xc-m3w5 | CVE-2023-54404 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | yes |
Background: What a vulnerability scan can and cannot prove →
Dependencies 105 packages
| Packages resolved | 105 |
|---|---|
| Stale | 32 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
audience_from_hubspot ~265
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | – | LinkedIn ad account id; defaults to config defaultAccountId |
| dryRun | boolean | – | Return counts and a masked sample without uploading anything |
| filters | array | – | CRM search filters, all ANDed (HubSpot allows up to 6 per group). Pass this or listId, not both. |
| listId | string | – | HubSpot list id (the ILS list id). Pass this or filters, not both. |
| name | string | yes | Audience/segment name |
| type | string | – | contact or company. With listId it defaults to the list's object type; with filters it defaults to contact. |
No output schema declared.
No examples provided.
audience_from_salesforce ~108
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | – |
| emailField | string | – | Email column name if not 'Email' |
| name | string | yes | Audience/segment name |
| soql | string | yes | SOQL selecting an email column, e.g. SELECT Email FROM Contact WHERE ... |
No output schema declared.
No examples provided.
compute_lift ~171
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.
| Name | Type | Req | Description |
|---|---|---|---|
| entityId | string | yes | – |
| entityType | string | yes | campaignGroup (the 'campaign'), campaign (the 'ad group'), or creative (the 'ad') |
| windowDays | integer | – | Days on each side of a change (default 14) |
No output schema declared.
No examples provided.
create_campaign ~348
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | – |
| applyDefaultConversion | boolean | – | – |
| applyDefaultExclusions | boolean | – | – |
| audienceSegmentUrn | string | – | urn:li:adSegment:... to target a matched audience |
| campaignGroupId | string | yes | Numeric campaign group id |
| conversionIds | array | – | – |
| costType | string | – | – |
| creativeSelection | string | – | Ad rotation: OPTIMIZED (LinkedIn default, favors the predicted winner) or ROUND_ROBIN (rotate ads evenly) |
| dailyBudget | object | – | – |
| geoUrns | array | – | urn:li:geo:... locations to include |
| locale | object | – | – |
| name | string | yes | – |
| objectiveType | string | – | Campaign objective. Required to be ENGAGEMENT to sponsor another member's post (thought-leader ads). |
| optimizationTargetType | string | – | Bidding strategy. MAX_CLICK = Maximum Delivery optimized for landing page clicks (automated bid, charged CPM, unitCost ignored). Omit or NONE for a manual bid. |
| politicalIntent | string | – | – |
| runSchedule | object | yes | – |
| status | string | – | – |
| targeting | object | – | – |
| targetingCriteria | object | – | – |
| totalBudget | – | – | – |
| type | string | – | – |
| unitCost | – | – | Bid amount |
No output schema declared.
No examples provided.
create_campaign_group ~71
Create a campaign group (the top-level 'campaign'). Defaults to DRAFT.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Numeric ad account id (no urn prefix) |
| name | string | yes | – |
| runSchedule | object | – | – |
| status | string | – | – |
| totalBudget | object | – | – |
No output schema declared.
No examples provided.
create_image_ad ~141
Create a single-image Sponsored Content creative (DRAFT). Omit imagePath to leave the campaign ready for an image later.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | – |
| callToAction | string | – | Call-to-action button label |
| campaignId | string | yes | – |
| clickUri | string | yes | – |
| commentary | string | yes | The post body / ad intro text |
| headline | string | yes | – |
| imagePath | string | – | – |
| name | string | – | Ad name shown in Campaign Manager |
| organizationUrn | string | yes | urn:li:organization:... that owns the post |
| status | string | – | – |
No output schema declared.
No examples provided.
create_text_ad ~65
Create a Text Ad creative (DRAFT by default).
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | – |
| campaignId | string | yes | – |
| clickUri | string | yes | – |
| status | string | – | – |
| text | string | yes | – |
| title | string | yes | – |
No output schema declared.
No examples provided.
delete_ad ~91
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).
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | – | – |
| creativeId | string | yes | – |
No output schema declared.
No examples provided.
estimate_audience ~70
Estimate audience size for a structured targeting spec (facet short name -> entity URNs). A campaign needs >=300 members to serve.
| Name | Type | Req | Description |
|---|---|---|---|
| exclude | object | – | facet short name -> entity URNs to exclude |
| include | object | yes | facet short name -> entity URNs (ANDed across facets) |
No output schema declared.
No examples provided.
gads_keyword_ideas ~98
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.
| Name | Type | Req | Description |
|---|---|---|---|
| customerId | string | – | – |
| languages | array | – | – |
| limit | integer | – | – |
| locations | array | – | – |
| pageUrl | string | – | – |
| seeds | array | yes | Seed keywords or phrases |
No output schema declared.
No examples provided.
gads_launch_search_campaign ~344
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 step in the Google Ads UI.
| Name | Type | Req | Description |
|---|---|---|---|
| adGroups | array | yes | – |
| budgetName | string | – | Defaults to the campaign name |
| campaignName | string | yes | – |
| conversionActionNames | array | – | Conversion actions to set as this campaign's goals; falls back to the config default |
| cpcBid | – | – | Amount in the ad account's currency, e.g. 150 for $150 |
| customerId | string | – | 10-digit customer id; falls back to config default |
| dailyBudget | number | yes | Amount in the ad account's currency, e.g. 150 for $150 |
| endDateTime | string | – | – |
| finalUrl | string | yes | Landing page for ads that do not override it |
| languages | array | – | ISO language codes |
| locations | array | – | ISO country codes (US, GB) or raw geoTargetConstant ids |
| negativeKeywordListId | string | – | – |
| negativeKeywords | array | – | – |
| startDateTime | string | – | – |
| validateOnly | boolean | – | – |
No output schema declared.
No examples provided.
gads_list_accounts ~39
List every Google Ads customer this login can reach. Run this first: it proves the OAuth client, developer token, and account access all work.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
gads_list_ads ~41
Ads in an ad group, with their responsive-search headlines and descriptions.
| Name | Type | Req | Description |
|---|---|---|---|
| adGroupId | string | yes | – |
| customerId | string | – | – |
No output schema declared.
No examples provided.
gads_list_campaigns ~43
Account structure: campaigns with their ad groups nested. Paused campaigns are included.
| Name | Type | Req | Description |
|---|---|---|---|
| customerId | string | – | – |
| includeRemoved | boolean | – | – |
No output schema declared.
No examples provided.
gads_list_client_accounts ~40
List the client accounts under a Google Ads manager (MCC) account.
| Name | Type | Req | Description |
|---|---|---|---|
| managerId | string | yes | Manager customer id, digits only |
No output schema declared.
No examples provided.
gads_list_conversion_actions ~37
Conversion actions on the account, so a launch can name one instead of guessing an id.
| Name | Type | Req | Description |
|---|---|---|---|
| customerId | string | – | – |
No output schema declared.
No examples provided.
gads_performance ~99
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).
| Name | Type | Req | Description |
|---|---|---|---|
| campaignId | string | – | – |
| customerId | string | – | – |
| endDate | string | – | YYYY-MM-DD |
| level | string | – | – |
| period | string | – | – |
| startDate | string | – | YYYY-MM-DD |
No output schema declared.
No examples provided.
gads_search ~58
Run a raw GAQL query against the account. Read-only escape hatch for anything the other tools do not cover.
| Name | Type | Req | Description |
|---|---|---|---|
| customerId | string | – | – |
| query | string | yes | A GAQL query. Read-only: SELECT ... FROM ... |
No output schema declared.
No examples provided.
get_audience_status ~30
Check a DMP segment's matching status and resolved size.
| Name | Type | Req | Description |
|---|---|---|---|
| segmentId | string | yes | – |
No output schema declared.
No examples provided.
get_competitor_creatives ~53
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.
| Name | Type | Req | Description |
|---|---|---|---|
| ids | array | yes | – |
No output schema declared.
No examples provided.
get_performance ~150
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | – | – |
| endDate | string | – | YYYY-MM-DD |
| level | string | – | campaign_group=campaign, campaign=ad group, creative=ad |
| parentId | string | – | Parent group id (for level=campaign) or campaign id (for level=creative) |
| period | string | – | – |
| startDate | string | – | YYYY-MM-DD; with endDate, overrides period |
No output schema declared.
No examples provided.
inspect_competitor_ads ~269
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.
| Name | Type | Req | Description |
|---|---|---|---|
| advertiser | string | – | Competitor/advertiser display name (accountOwner) |
| companyId | string | – | Numeric LinkedIn company id, more precise than name |
| concurrency | number | – | Remote worker concurrency is fixed at one. |
| copyMax | integer | – | Creative sample size, capped at 10. Worker budgets cannot be overridden. |
| countries | array | – | ISO-3166 country codes to scope, e.g. ['US','GB'] |
| deep | boolean | – | Enqueue up to 10 verified company ads on the remote worker; reuse cached creatives. |
| engine | string | – | auto = official API plus remote creative worker; api = metadata only. Local scraping is disabled. |
| keyword | string | – | Free-text keyword search across ad copy |
| max | integer | – | Max ads to collect |
No output schema declared.
No examples provided.
launch_from_brief ~157
End-to-end: optional audience upload -> campaign group -> campaign -> draft creatives. Everything DRAFT. Returns Campaign Manager review links.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | – |
| audience | object | – | – |
| bid | – | – | – |
| campaignGroupName | string | yes | – |
| campaignName | string | yes | – |
| conversionIds | array | – | – |
| conversionName | string | – | e.g. 'Demo Booked - Insight Tag' |
| creativeSelection | string | – | – |
| creatives | array | – | – |
| dailyBudget | object | yes | – |
| geoUrns | array | – | Defaults to United States |
| runSchedule | object | yes | – |
| targeting | object | – | – |
| type | string | – | – |
No output schema declared.
No examples provided.
list_ad_accounts ~19
List LinkedIn ad accounts this app can access.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_ad_changes ~99
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.
| Name | Type | Req | Description |
|---|---|---|---|
| entityId | string | – | – |
| entityType | string | – | campaignGroup (the 'campaign'), campaign (the 'ad group'), or creative (the 'ad') |
| limit | integer | – | Max rows (default 50) |
| tag | string | – | – |
No output schema declared.
No examples provided.
list_ads ~51
List the creatives (ads) in a campaign (ad group), drafts included: id, name, status, and backing post urn.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | – | – |
| campaignId | string | yes | – |
No output schema declared.
No examples provided.
list_campaigns ~118
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | – | – |
| groupId | string | – | Scope campaigns to one campaign group id |
| includeArchived | boolean | – | – |
| level | string | – | – |
No output schema declared.
No examples provided.
list_conversions ~49
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | – | – |
No output schema declared.
No examples provided.
list_facet_entities ~50
List all entities of a small facet (e.g. seniorities, functions, degrees) to pick URNs from.
| Name | Type | Req | Description |
|---|---|---|---|
| facet | string | yes | short facet name, e.g. seniorities |
No output schema declared.
No examples provided.
list_targeting_facets ~69
List LinkedIn targeting facets you can target on. Common short names: locations, profileLocations, seniorities, titles, functions, industries, staffCountRanges, skills, employers, employersPast, audienceMatchingSegments, dynamicSegments, interests, degrees, fieldsOfStudy, schools, groups.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
log_ad_change ~252
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.
| Name | Type | Req | Description |
|---|---|---|---|
| after | string | – | New value |
| at | string | – | ISO 8601 time the change took effect; defaults to now |
| before | string | – | Prior value, if known |
| entityId | string | yes | Numeric id of the campaign group / campaign / creative |
| entityType | string | yes | campaignGroup (the 'campaign'), campaign (the 'ad group'), or creative (the 'ad') |
| field | string | – | Field that changed, e.g. dailyBudget, headline, status |
| label | string | – | Hypothesis/label, e.g. 'outcome-led headline test' |
| name | string | – | Human name of the entity (for nicer listings) |
| note | string | – | Freeform note (used when there is no specific field) |
| tags | array | – | – |
No output schema declared.
No examples provided.
performance_summary ~105
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'.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | – | – |
| endDate | string | – | YYYY-MM-DD |
| period | string | – | – |
| startDate | string | – | YYYY-MM-DD; with endDate, overrides period |
No output schema declared.
No examples provided.
performance_trend ~113
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.
| Name | Type | Req | Description |
|---|---|---|---|
| bucket | string | – | – |
| endDate | string | – | YYYY-MM-DD |
| entityId | string | yes | Numeric id of the account/group/campaign/creative to trend |
| level | string | – | – |
| period | string | – | – |
| startDate | string | – | YYYY-MM-DD; with endDate, overrides period |
No output schema declared.
No examples provided.
search_targeting ~94
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.
| Name | Type | Req | Description |
|---|---|---|---|
| facet | string | yes | short facet name, e.g. titles, industries, skills, staffCountRanges, locations |
| query | string | yes | – |
No output schema declared.
No examples provided.
update_ad ~234
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | – | Numeric ad account id; defaults to the configured account |
| creativeId | string | yes | Numeric creative (ad) id or a full urn:li:sponsoredCreative URN |
| dryRun | boolean | – | Return the patch without sending it |
| status | string | yes | PAUSED stops the ad serving. ACTIVE starts it serving and spending: set it only when the user explicitly asks. ARCHIVED retires it. |
No output schema declared.
No examples provided.
update_campaign ~400
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 first to preview the patch before touching a live campaign.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | – |
| applyDefaultExclusions | boolean | – | – |
| audienceSegmentUrn | string | – | urn:li:adSegment:... (or bare id) matched audience to target, which replaces existing targeting |
| campaignId | string | yes | Numeric campaign (ad group) id to update |
| costType | string | – | Change the cost type (CPM for Maximum Delivery) |
| creativeSelection | string | – | Ad rotation: OPTIMIZED (favors the predicted winner) or ROUND_ROBIN (rotate ads evenly) |
| dailyBudget | object | – | – |
| dryRun | boolean | – | – |
| geoUrns | array | – | urn:li:geo:... locations to include alongside the audience |
| name | string | – | – |
| optimizationTargetType | string | – | Bidding strategy. MAX_CLICK = Maximum Delivery optimized for landing page clicks (automated bid, charged CPM, unitCost ignored). Omit or NONE for a manual bid. |
| runSchedule | object | – | – |
| status | string | – | – |
| targeting | object | – | – |
| targetingCriteria | object | – | – |
| totalBudget | – | – | – |
| unitCost | – | – | Bid amount |
No output schema declared.
No examples provided.
upload_audience_csv ~127
Clean a CSV at csvPath and upload it as a matched-audience DMP segment. Auto-detects contact (email) vs company (account) lists, normalizes column names, drops non-matcher columns, hashes emails, and converts company domains to website URLs. Requires the Audiences product; matching takes up to 48h.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | – | – |
| csvPath | string | yes | Path to the CSV file on the server |
| name | string | yes | – |
| type | string | – | Force the list type; auto-detected if omitted |
No output schema declared.
No examples provided.
How do I install the Adwarp MCP server?
Adwarp runs locally as an npm package, launched with npx -y adwarp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · adwarp
claude mcp add adwarp-dev-adwarp -- npx -y adwarp
What is the Adwarp MCP server?
Adwarp is an MCP server listed in the public MCP registry as io.github.adwarp-dev/adwarp. Open-source ad agent for LinkedIn Ads and Google Ads. Drafts campaigns, audiences and reports. This page covers its npm package (adwarp).
Is the Adwarp MCP server safe to use?
Adwarp scores 72 out of 100 on VerifyMCP. We recorded 2 known advisories against it as of 25 October 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Adwarp MCP server expose?
Adwarp exposes 37 tools: gads_list_accounts, gads_list_client_accounts, gads_keyword_ideas, gads_list_campaigns, gads_list_ads, and 32 more. Their descriptions and schemas cost roughly 4,568 tokens of context every time the server is loaded.
Is the Adwarp MCP server still maintained?
Adwarp is still listed as active in the MCP registry. We last reached this channel on 25 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Adwarp MCP server under?
Adwarp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.