adwarp

MCPattestedlive
v0.4.0UnknownMITUpdated 3d agonpmGitHub

Open-source ad agent for LinkedIn Ads and Google Ads. Drafts campaigns, audiences and reports from Claude Code, Cursor, Codex or other MCP clients that can run a local server.

Endpoint healthlive
checked 5h ago · 95ms · auth required
100% of the last 1 check reached this endpoint
Works in
ClaudeCursorCopilotChatGPTGemini

Inferred from the transports this listing declares (stdio, streamable-http). A client not listed here hasn’t been ruled out — it just isn’t something Forge can confirm.

Attested build
A verified provenance attestation binds this artifact to the listed repository. Nobody has claimed the listing yet — this proves where the code was built, not who stands behind it.
596Downloads/wk
23GitHub stars
1Forks
3d agoLast update
Reads these credentials
  • ADWARP_LINKEDIN_CLIENT_SECRETOAuth appoptional

    LinkedIn app Client Secret. Leave unset to use ~/.adwarp

  • ADWARP_LINKEDIN_REFRESH_TOKENOAuth appoptional

    Refresh token from adwarp auth login. Leave unset to use ~/.adwarp

Declared by the author in the official MCP registry. Forge does not store, broker, or ever see these values — the config below is scaffolded with placeholders you fill in locally.

Package
AuthorUnknown
LicenseMIT
Version0.4.0
Sourcenpm+mcp-registry
Trust Status
A
85/100Trusted
✓Listed in Forge index+10/10
✓Identity verified · attested build+20/20
—Ed25519 publish signature+0/5
→ Included automatically when the publisher runs `forge publish`
—Domain verification+0/5
→ Publisher: host /.well-known/forge.json on the package homepage with { "publisher": "<github-login>" }
✓npm Trusted Publishing (Sigstore)+5/5
—npm maintainer match+0/5
→ Publisher: add the verified GitHub login to the npm package's maintainers (npm owner add <login>)
✓CVE scan · clean+30/30
✓Static analysis · clean+20/20
Paste into Claude Code, Cursor, or any AI assistant to fix all gaps
StatusIdentity verified
PublisherUnverified
SignatureUnsigned
Domain—
Provenance✓ Sigstore-verified · 4989534
Dependencies60 resolved · 1 with advisories
Tool surface37 tools · 2 privileged
Security scan✓ Cleanv0.4.0 · todayHow well does this scan work?
EvalsNone
IndexedOct 21, 2026

Verification confirms publisher identity (repo ownership), not code safety. The security scan covers known CVEs and suspicious install scripts.

Tools

37 tools · 2 privileged
Statically extracted from the published packagev0.4.0 · 5h ago

Read out of the source npm actually ships, at scan time. The package was never executed. Tools registered dynamically at runtime, or hidden inside bundled or minified code, can be missed — so this is a floor on the tool surface, not a complete census of it.

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

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

No input schema was published for this tool.

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

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

No input schema was published for this tool.

gads_keyword_ideasKeyword 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.

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.

No input schema was published for this tool.

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

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

No input schema was published for this tool.

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

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

No input schema was published for this tool.

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

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

No input schema was published for this tool.

gads_launch_search_campaignNo description published

This tool published no description. Forge does not invent one.

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

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).

No input schema was published for this tool.

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

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

No input schema was published for this tool.

list_ad_accountsList LinkedIn ad accounts this app can access.

List LinkedIn ad accounts this app can access.

No input schema was published for this tool.

list_targeting_facetsNo description published

This tool published no description. Forge does not invent one.

search_targetingTypeahead-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.

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.

No input schema was published for this tool.

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

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

No input schema was published for this tool.

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

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

No input schema was published for this tool.

upload_audience_csvprivilegedClean 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.

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.

No input schema was published for this tool.

audience_from_salesforceBuild 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.

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.

No input schema was published for this tool.

audience_from_hubspotBuild 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). Pa…

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). Pa…

No input schema was published for this tool.

list_conversionsList 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 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.

No input schema was published for this tool.

list_campaignsList 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 (defa…

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 (defa…

No input schema was published for this tool.

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

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

No input schema was published for this tool.

delete_adprivilegedDelete 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 rec…

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 rec…

No input schema was published for this tool.

update_adChange 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…

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…

No input schema was published for this tool.

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

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

No input schema was published for this tool.

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

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

No input schema was published for this tool.

create_campaignCreate 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 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.

No input schema was published for this tool.

update_campaignNo description published

This tool published no description. Forge does not invent one.

create_text_adCreate a Text Ad creative (DRAFT by default).

Create a Text Ad creative (DRAFT by default).

No input schema was published for this tool.

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

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

No input schema was published for this tool.

performance_summaryAccount 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'.

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'.

No input schema was published for this tool.

get_performancePer-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.

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.

No input schema was published for this tool.

performance_trendWeekly 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.

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.

No input schema was published for this tool.

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

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

No input schema was published for this tool.

log_ad_changeRecord 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…

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…

No input schema was published for this tool.

list_ad_changesList 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 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.

No input schema was published for this tool.

compute_liftFor 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…

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…

No input schema was published for this tool.

inspect_competitor_adsDiscover 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 g…

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 g…

No input schema was published for this tool.

get_competitor_creativesRead 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.

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.

No input schema was published for this tool.

34 of 37 tools published a description.

Tool names and descriptions are written by the publisher and shown verbatim as inert text. They are the strings an MCP client passes to a model, so Forge scans them for prompt-injection patterns — any finding appears with the security scan above. “Privileged” is a keyword match on the tool name, not an audit of what the tool does: a benign-sounding name can still do anything.

About

Open-source ad agent for LinkedIn Ads and Google Ads. Drafts campaigns, audiences and reports from Claude Code, Cursor, Codex or other MCP clients that can run a local server.

Keywords
mcpmcp-servermodel-context-protocollinkedin-adsgoogle-adsai-agentclaudecli
Alternatives
Comparing tool surfaces…

Dependency tree

What one Forge scan resolved from npm metadata on 2026-10-22 — observed resolution, not a publisher declaration.

60 packages resolved · 5 direct · 1 carrying advisories Resolution stops at depth 4 and 60 packages.

The crawl stopped at the 60-package limit. The rest of the tree was never resolved.

36 more resolved packages are not drawn here (display cap: 24). Every dependency carrying an advisory is drawn regardless of the cap. Full inventory (CycloneDX SBOM)

Declared but not resolved

69 declared dependencies never landed in the tree. They are missing from Forge's resolution, not from the package.

+57 more not listed. The counts by reason above cover all of them.

Not followed: peerDependencies. This tree covers runtime dependencies only, so anything those pull in was never resolved.

Topics

Related in social media