# Ads Uploader (npm · @adsuploader/mcp)

Meta ads bulk launcher: upload creatives, edit builds, preview, and create paused ads.

- Trust score: 60/100 (medium)
- Change this week: +15
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-28

## Components

- remote · `adsuploader.com`: 38/100, [markdown](https://verifymcp.io/servers/com-adsuploader-mcp/api-mcp.md), [page](https://verifymcp.io/servers/com-adsuploader-mcp/api-mcp)
- npm · `@adsuploader/mcp`: 60/100 (this document), [markdown](https://verifymcp.io/servers/com-adsuploader-mcp/adsuploader-mcp.md), [page](https://verifymcp.io/servers/com-adsuploader-mcp/adsuploader-mcp)

## Channel facts

- Registry: `npm`
- Package: `@adsuploader/mcp`
- Version: `0.3.0`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-28.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 31 of 92 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 10/100
  - Repository check failed: no source repository is declared.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: the license (UNLICENSED) isn't a recognized OSI-approved license.
  - Actively maintained (last published 6 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 5128 tokens (~183/item across 28 items; 28 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 90/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 71% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 28 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the Ads Uploader MCP server?

Ads Uploader runs locally as an npm package, launched with npx -y @adsuploader/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add com-adsuploader-mcp -- npx -y @adsuploader/mcp
```

### Cursor

```json
{
  "mcpServers": {
    "com-adsuploader-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@adsuploader/mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-adsuploader-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@adsuploader/mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add com-adsuploader-mcp -- npx -y @adsuploader/mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-adsuploader-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@adsuploader/mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-adsuploader-mcp --command npx --arg -y --arg @adsuploader/mcp
```

### Hermes

```yaml
mcp_servers:
  com-adsuploader-mcp:
    command: "npx"
    args: ["-y", "@adsuploader/mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "com-adsuploader-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@adsuploader/mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-adsuploader-mcp -t stdio -c npx -a -y @adsuploader/mcp
```

### Other

```json
{
  "mcpServers": {
    "com-adsuploader-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@adsuploader/mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-28 (score 60, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-25 (score 60, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-22 (score 60, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-09-21 (score 45)

First indexed and scored.

## MCP tools (28)

### `ads_whoami` (~62 tokens)

Show authenticated user

Show which Ads Uploader user this session is authenticated as (email, name, user ID) and the API host it talks to. Use this to verify the tool session matches the account the user is logged into on the web before editing builds or creating ads.

### `ads_list_accounts` (~22 tokens)

List ad accounts

List Meta ad accounts available to the authenticated Ads Uploader user.

### `ads_list_campaigns` (~96 tokens)

List campaigns

List campaigns in an ad account, optionally filtered by name search and status.

Input parameters:

- `accountId` (string, required): Ad account ID, e.g. act_123.
- `limit` (integer)
- `offset` (integer)
- `search` (string): Optional campaign name search text.
- `status` (string): 'active' returns only active/in-process campaigns (default); 'all' also includes paused and archived.

### `ads_list_adsets` (~101 tokens)

List ad sets

List ad sets in a campaign.

Input parameters:

- `accountId` (string, required): Ad account ID, e.g. act_123.
- `campaignId` (string, required): Meta campaign ID.
- `limit` (integer)
- `offset` (integer)
- `search` (string): Optional ad set name search text.
- `status` (string): 'active' returns only active/in-process ad sets (default); 'all' also includes paused and archived.

### `ads_list_ads` (~100 tokens)

List ads

List ads in an ad set.

Input parameters:

- `accountId` (string, required): Ad account ID, e.g. act_123.
- `adSetId` (string, required): Meta ad set ID.
- `limit` (integer)
- `offset` (integer)
- `search` (string): Optional ad name search text.
- `status` (string): 'active' returns only active/in-process ads (default); 'all' also includes paused and archived.

### `ads_get_ad` (~46 tokens)

Get ad details

Get one ad with its creative details.

Input parameters:

- `accountId` (string, required): Ad account ID, e.g. act_123.
- `adId` (string, required): Meta ad ID.

### `ads_list_pages` (~60 tokens)

List Facebook Pages

List Facebook Pages (with their connected Instagram accounts) available for profile overrides in an ad account.

Input parameters:

- `accountId` (string, required): Ad account ID, e.g. act_123.
- `limit` (integer)
- `offset` (integer)

### `ads_search_targeting` (~166 tokens)

Search targeting options

Search Meta targeting values for ads_create or a saved build spec. Use type=city to find targeting.cities[].key values, type=zip to find targeting.zips[].key values, or type=detailed to find complete {id,name,type} entries for targeting.detailedTargetingGroups. IDs must never be guessed; use this tool to discover them.

Input parameters:

- `accountId` (string, required): Ad account ID, e.g. act_123.
- `limit` (integer)
- `query` (string, required): City name, zip/postal code, or detailed-targeting keyword to search.
- `type` (string, required): Use city to find targeting.cities[].key values, zip to find targeting.zips[].key values, or detailed to find detailedTargetingGroups selections.

### `ads_list_presets` (~61 tokens)

List presets

List saved API or ad text presets for an ad account.

Input parameters:

- `accountId` (string, required): Ad account ID, e.g. act_123.
- `limit` (integer)
- `offset` (integer)
- `type` (string)

### `ads_get_preset` (~48 tokens)

Get preset

Get one saved preset by ID.

Input parameters:

- `accountId` (string, required): Ad account ID, e.g. act_123.
- `presetId` (string, required): Ads Uploader preset ID.

### `ads_save_preset` (~75 tokens)

Save preset

Save an existing ad as a reusable API preset.

Input parameters:

- `accountId` (string, required): Ad account ID, e.g. act_123.
- `fromAdId` (string, required): Existing Meta ad ID to save as a preset.
- `name` (string, required): Preset name.
- `shareWithTeam` (boolean)

### `ads_list_builds` (~59 tokens)

List saved builds

List saved uploader builds for the authenticated user, optionally filtered by ad account.

Input parameters:

- `accountId` (string): Optional ad account ID filter, e.g. act_123.
- `limit` (integer)
- `offset` (integer)

### `ads_save_build` (~422 tokens)

Save build

Create a durable saved build for the authenticated user. A spec-only build is supported and preferred for agent-created configurations because the web uploader hydrates it and generates its own webState on resume. Portable specs support the full v1 launch surface, including campaign-qualified texts.perAdset entries and per-campaign profile.campaigns identity overrides. Web-captured builds can launch without uploadId when spec.mediaItems carries a mediaHash for every image and mediaId for every video, plus thumbnailHash for video paths that require it (Multi Media uses thumbnailUrl). Do not construct webState by hand. Only provide webState when round-tripping a webState previously read from a build without changing its structure. accountId is optional when it can be derived from webState.selectedAccount.accountId, webState.selectedAccount.account_id, or spec.accountId. Confirm that the build was saved. If the user has an open uploader tab, do not repeat the returned url; share it only when the user asks for it or says the tab is closed. For a new headless build with no open uploader tab, give the returned url so the user can open and review it. Use ads_create with buildId to launch it when spec.launchable is true. launchable only describes headless ads_create launches; a launchable:false build still opens, edits, and launches fine in the web uploader, so do not warn web-bound users about it.

Input parameters:

- `accountId` (string): Optional ad account ID. The server can also derive it from webState.selectedAccount.accountId, webState.selectedAccount.account_id, or spec.accountId.
- `name` (string): Optional durable build name.
- `notes` (string): Optional free-form notes stored on the build.
- `spec` (object): Portable launch specification. Spec-only creation is supported and preferred for agent-created builds.
- `webState` (object): Opaque web uploader session snapshot. Do not construct it by hand. Only provide webState when round-tripping a snapshot previously read from a build without changing its structure.

### `ads_get_build` (~73 tokens)

Get saved build

Get one saved build by ID. Returns spec and webState without truncation. Update spec for content changes. Treat webState as an opaque web uploader session snapshot and do not reconstruct it. Other metadata is trimmed for display.

Input parameters:

- `buildId` (string, required): Saved build ID, e.g. build_abc123...

### `ads_fork_build` (~111 tokens)

Fork saved build

Fork a saved build into a new autosaved draft. Use this instead of editing the existing build when the user wants a variant and the original must stay intact. The fork copies the uploader configuration and media references, receives a new build ID, and can be edited independently. Confirm that the fork was created; share its URL only when the user asks for it or says there is no open uploader tab.

Input parameters:

- `buildId` (string, required): Saved build ID to duplicate, e.g. build_abc123...

### `ads_update_build` (~633 tokens)

Update saved build

Update one saved build by ID: rename it, edit notes, patch its portable spec, or deliberately replace its full spec/webState. Uploaded-media partnerships support profile.partnership for a shared Second Identity and texts.perAd/perAdset sponsor overrides, including both IDs null for No Partner. These builds launch through the CLI and MCP and hydrate their identities in the web uploader. Approval is rechecked at preview and launch. Prefer specPatch for content edits: omitted fields survive and nested text entries merge field-by-field, so changing headlines does not clear link, displayUrl, CTA, URL tags, or AI disclosure. CTA fields use Meta enum values such as SHOP_NOW. Standard ads normalize human labels such as Shop Now; imported partnership posts require the enum and do not normalize labels. specPatch requires the revision from ads_get_build as expectedRevision. Use spec only for a full rewrite because it replaces the whole portable spec. Do not construct webState by hand; only round-trip an unchanged webState previously read from the build. When only portable spec changes, the web uploader regenerates webState on next resume. Setting a name promotes an autosaved build to a kept, named build. Returns updated metadata only; call ads_get_build again to read the stored state. Confirm that the update was saved; an open uploader tab picks it up automatically. Share the build url only when the user asks for it or says the tab is closed. Do not surface webStateStale or launchable/launchBlockers unless the user asked about launching from the CLI/MCP: webStateStale:true after a spec edit is normal and clears itself when the web uploader next opens the build, and launchable only describes headless ads_create launches - it never prevents opening, editing, or launching the build in the web uploader.

Input parameters:

- `buildId` (string, required): Saved build ID, e.g. build_abc123...
- `expectedRevision` (integer): Revision returned by ads_get_build. Required with specPatch and recommended for every update; the update fails instead of overwriting a newer revision.
- `name` (string): New build name. Setting a name marks the build as manually saved, so it stops rotating out with autosaves.
- `notes` (string): Free-form notes stored on the build.
- `spec`: Replacement portable spec (the launch configuration used by ads_create with buildId). Send the FULL updated spec object, not a partial diff. Set to null to clear it.
- `specPatch` (object): Preferred for content edits. Field-aware merge patch applied to the stored portable spec: omitted fields survive, nested objects (including individual texts.perAd/perAdset entries) merge, supplied ar…
- `webState` (object): Opaque web uploader session snapshot. Do not construct this object by hand. Only send it when round-tripping a webState previously read from the build without changing its structure. For content chan…

### `ads_delete_build` (~35 tokens)

Delete saved build

Delete one saved build by ID.

Input parameters:

- `buildId` (string, required): Saved build ID, e.g. build_abc123...

### `ads_list_uploads` (~52 tokens)

List upload batches

List recent media upload batches for an ad account.

Input parameters:

- `accountId` (string, required): Ad account ID, e.g. act_123.
- `limit` (integer)
- `offset` (integer)

### `ads_get_upload` (~92 tokens)

Get upload status

Get a completed upload batch by batchId, or poll a background media-ingest job by jobId until complete is true.

Input parameters:

- `accountId` (string): Optional ad account ID, e.g. act_123.
- `batchId` (string): Completed upload batch ID.
- `jobId` (string): Background ingest job ID. Poll until complete is true; the final batch summary is returned in result.

### `ads_upload` (~226 tokens)

Upload media

Upload media to an ad account. Use paths for local disk media, files[].url for public URLs or Google Drive file links, or driveFolderUrl for a public Drive folder. URL and Drive modes return a background jobId to poll with ads_get_upload. Base64 is only for a couple of small images; presigned mode is only for byte-capable environments.

Input parameters:

- `accountId` (string, required): Ad account ID, e.g. act_123.
- `batchId` (string): Optional existing batch ID for grouping with an earlier upload.
- `cwd` (string): Optional base directory for resolving relative paths.
- `driveFolderUrl` (string): Public Google Drive folder share link for server-side background ingestion.
- `files` (array): Public media URLs (including Drive file links), small inline images, or presigned metadata.
- `paths` (array): Local files or directories to upload when running the local stdio server. Relative paths resolve from cwd.
- `presigned` (boolean): Only for environments that can PUT bytes themselves. Large files may return multipart part URLs.

### `ads_upload_finalize` (~138 tokens)

Finalize media upload

Finalize a presigned upload batch after the client has PUT each file. Hosted calls return a background ingest jobId; poll it with ads_get_upload.

Input parameters:

- `accountId` (string, required): Ad account ID, e.g. act_123.
- `batchId` (string, required): Upload batch ID returned by ads_upload with presigned=true.
- `files` (array): Files returned by ads_upload presigned mode after the client has PUT each file to uploadUrl or each multipart chunk to parts[].url.
- `thumbnailMap` (array): Optional explicit video-to-thumbnail staged key map. ads_upload usually returns thumbnailFileKey on the video automatically.

### `ads_create` (~855 tokens)

Create Meta ads

Create ads from a v1 AdSpec request body or saved build, including Instagram existing-post partnership ads with common, per-ad-set, or per-ad sponsors and text. Import by Instagram URL, shortcode, source ID, or ad code in mediaItems. Uploaded media supports Facebook and Instagram partnerships: set profile.partnership.enabled, shared or campaign sponsors, and texts.perAd/perAdset sponsors. Null both row sponsor IDs means No Partner; sponsorPageUseInstagramAccount supports Instagram-only partners. Approval is checked for the effective First Identity. Omit uploaderMode for uploads. Facebook post imports, mixed post/upload batches and Threads on imported posts are unsupported. CTA fields use Meta enum values such as SHOP_NOW. Standard ads normalize human labels such as Shop Now; imported partnership posts require the enum and do not normalize labels. Saved builds use their upload batch first, then fall back by media name to account-scoped mediaHash/image and mediaId/video identifiers captured in mediaItems. Videos used as standard, carousel, flexible, or placement media also require captured thumbnailHash; Multi Media videos require captured thumbnailUrl. Supports campaign-qualified texts.perAdset overrides and per-campaign profile.campaigns identities in multi-campaign launches. Admin-only options.testMode runs Meta validate_only without creating Meta objects and returns metaValidation passed, failed and not-checked counts. This blocks until the server job completes or the 30 minute ceiling is reached. If it returns status "still_running", the job is still progressing server-side; call ads_get_job with the returned jobId until complete is true.

Input parameters:

- `accountId` (string): Ad account ID, e.g. act_123.
- `adNamePattern` (string)
- `adPresetId` (string): Saved API preset ID. Mutually exclusive with campaign, adSet, and copyFromAd.
- `adSet`
- `aiDisclosure` (boolean)
- `buildId` (string): Saved build ID. When provided, the build's portable spec is used as the create body.
- `campaign`
- `carousel` (array): Carousel creatives using media names from uploadId or captured mediaItems. Card text stays in the public AdSpec shape.
- `copyFromAd` (string): Existing Meta ad ID to copy settings from.
- `creative`
- `creativeEnhancements`
- `cta`
- `executionPlan`
- `flexible` (array): Flexible-format creatives using media names from uploadId or captured mediaItems.
- `launchBlockers` (array): Saved-build metadata. Ignored when creating ads.
- `launchable` (boolean): Saved-build metadata. Ignored when creating ads.
- `mediaItems` (array): Portable saved-build media metadata. When uploadId is unavailable or incomplete, images resolve by mediaHash and videos by mediaId. Standard, carousel, flexible, and placement videos also need thumbn…
- `multimedia` (array): Multi Media creatives with optional per-asset public text fields.
- `options`
- `preBuiltApiCalls`
- `processedConfig`
- `profile`
- `resetAdNameIndexPerAdSet` (boolean): Restart the {index} token for ad names in each ad set.
- `targeting` (object): AdSpec-shaped audience override for NEW ad sets: locations, optional age/gender, and one flat OR group of mixed detailed-targeting selections. Omitted fields inherit from the source ad set. Set detai…
- `textPresetId` (string): Saved text preset ID. Mutually exclusive with texts.
- `texts`
- `uploadId` (string): Upload batch ID returned by ads_upload or ads_get_upload.
- `urlTags` (string)

### `ads_preview` (~706 tokens)

Preview ad creation

Preview a v1 AdSpec or saved build, including uploaded-media partnerships and Instagram existing-post partnership imports. Uploaded-media previews report effective sponsors, approval and header mode per ad and ad set. Resolves posts and checks Meta permissions using read/validate-only calls without creating ads or storing codes. Returns per-ad creators, sponsors, optional text, authorization status, warnings, and a code-free resolvedSpec. Supply transient codes again at create. Uploaded media supports Facebook and Instagram partnerships: set profile.partnership.enabled, shared or campaign sponsors, and texts.perAd/perAdset sponsors. Null both row sponsor IDs means No Partner; sponsorPageUseInstagramAccount supports Instagram-only partners. Approval is checked for the effective First Identity. Omit uploaderMode for uploads. Facebook post imports, mixed post/upload batches and Threads on imported posts are unsupported.

Input parameters:

- `accountId` (string): Ad account ID, e.g. act_123.
- `adNamePattern` (string)
- `adPresetId` (string): Saved API preset ID. Mutually exclusive with campaign, adSet, and copyFromAd.
- `adSet`
- `aiDisclosure` (boolean)
- `buildId` (string): Saved build ID. When provided, the build's portable spec is used as the create body.
- `campaign`
- `carousel` (array): Carousel creatives using media names from uploadId or captured mediaItems. Card text stays in the public AdSpec shape.
- `copyFromAd` (string): Existing Meta ad ID to copy settings from.
- `creative`
- `creativeEnhancements`
- `cta`
- `executionPlan`
- `flexible` (array): Flexible-format creatives using media names from uploadId or captured mediaItems.
- `launchBlockers` (array): Saved-build metadata. Ignored when creating ads.
- `launchable` (boolean): Saved-build metadata. Ignored when creating ads.
- `mediaItems` (array): Portable saved-build media metadata. When uploadId is unavailable or incomplete, images resolve by mediaHash and videos by mediaId. Standard, carousel, flexible, and placement videos also need thumbn…
- `multimedia` (array): Multi Media creatives with optional per-asset public text fields.
- `options`
- `preBuiltApiCalls`
- `processedConfig`
- `profile`
- `resetAdNameIndexPerAdSet` (boolean): Restart the {index} token for ad names in each ad set.
- `targeting` (object): AdSpec-shaped audience override for NEW ad sets: locations, optional age/gender, and one flat OR group of mixed detailed-targeting selections. Omitted fields inherit from the source ad set. Set detai…
- `textPresetId` (string): Saved text preset ID. Mutually exclusive with texts.
- `texts`
- `uploadId` (string): Upload batch ID returned by ads_upload or ads_get_upload.
- `urlTags` (string)

### `ads_get_job` (~74 tokens)

Get job status

Get or resume an ad creation job by jobId, returning its summary and recent operations. After ads_create returns still_running, poll until complete is true.

Input parameters:

- `jobId` (string, required): Ad creation job ID.
- `operations` (string): Use recent for the last 20 operations or full for the complete operation log.

### `ads_duplicate_by_post` (~377 tokens)

Duplicate ads by post

Duplicate existing Meta ads selected by Page post ID into an existing ad set or new cloned ad set while preserving their post references. Use postIds for discovery or adIds for exact selection, never both. Preview returns sourceCandidates and a pinned resolvedRequest. Ambiguous matches require explicit adIds; warned live runs require acknowledgeWarnings:true or useCreativeId:true. This blocks until the duplication completes or the 30 minute ceiling is reached. If it returns status "still_running", call ads_get_duplication with the returned jobId until complete is true.

Input parameters:

- `accountId` (string, required): Meta ad account ID, e.g. act_123.
- `acknowledgeWarnings` (boolean): Explicitly continue after reviewing preview creative warnings. Required for warned live runs unless useCreativeId is true.
- `adIds` (array): Ordered exact source ad IDs. Use preview.resolvedRequest to retain the reviewed selection; exclusive with postIds.
- `adNamePattern` (string): New ad name pattern. Supports {AdName} and {Index}.
- `adSetId` (string): Existing destination ad set, or the template when a new-ad-set mode is selected. Must belong to campaignId and the selected account.
- `campaignId` (string): Existing destination campaign ID.
- `newAdSet`: One shared new ad set. Cannot be combined with newAdSetPerAd.
- `newAdSetPerAd`: One new ad set per source ad. Cannot be combined with newAdSet; one source produces one shared clone.
- `paused` (boolean): Create duplicated ads paused.
- `postIds` (array): Discover source ads by Page post ID. Multiple matches require an explicit adIds selection; exclusive with adIds.
- `useCreativeId` (boolean): Reuse original creative IDs instead of creating post-reference creatives.

### `ads_duplicate_by_post_preview` (~349 tokens)

Preview duplication by post

Preview a post-ID duplication of existing Meta ads selected by Page post ID without creating anything. Use postIds for discovery or adIds for exact selection, never both. Preview returns sourceCandidates and a pinned resolvedRequest. Ambiguous matches require explicit adIds; warned live runs require acknowledgeWarnings:true or useCreativeId:true. Returns a cleaned source-to-destination plan and never exposes raw Meta payloads.

Input parameters:

- `accountId` (string, required): Meta ad account ID, e.g. act_123.
- `acknowledgeWarnings` (boolean): Explicitly continue after reviewing preview creative warnings. Required for warned live runs unless useCreativeId is true.
- `adIds` (array): Ordered exact source ad IDs. Use preview.resolvedRequest to retain the reviewed selection; exclusive with postIds.
- `adNamePattern` (string): New ad name pattern. Supports {AdName} and {Index}.
- `adSetId` (string): Existing destination ad set, or the template when a new-ad-set mode is selected. Must belong to campaignId and the selected account.
- `campaignId` (string): Existing destination campaign ID.
- `newAdSet`: One shared new ad set. Cannot be combined with newAdSetPerAd.
- `newAdSetPerAd`: One new ad set per source ad. Cannot be combined with newAdSet; one source produces one shared clone.
- `paused` (boolean): Create duplicated ads paused.
- `postIds` (array): Discover source ads by Page post ID. Multiple matches require an explicit adIds selection; exclusive with adIds.
- `useCreativeId` (boolean): Reuse original creative IDs instead of creating post-reference creatives.

### `ads_get_duplication` (~47 tokens)

Get duplication status

Get or resume a duplication job by jobId. After ads_duplicate_by_post returns still_running, poll until complete is true.

Input parameters:

- `jobId` (string, required): Duplication job ID.

### `ads_cancel_job` (~42 tokens)

Cancel job

Cancel a running ad creation job or media ingest job.

Input parameters:

- `jobId` (string, required): Ad creation job ID or media ingest job ID (ingest_...).

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-adsuploader-mcp/adsuploader-mcp#diagnostics

## Score history

- 2026-09-28: 60
- 2026-09-27: 60
- 2026-09-26: 60
- 2026-09-25: 60
- 2026-09-24: 60
- 2026-09-23: 60
- 2026-09-22: 60
- 2026-09-21: 45

## Common questions

### What is the Ads Uploader MCP server?

Ads Uploader is an MCP server listed in the public MCP registry as com.adsuploader/mcp. Meta ads bulk launcher: upload creatives, edit builds, preview, and create paused ads. This page covers its npm package (@adsuploader/mcp).

### Is the Ads Uploader MCP server safe to use?

Ads Uploader scores 60 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 28 September 2026. It declares no install or post-install scripts. 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 Ads Uploader MCP server expose?

Ads Uploader exposes 28 tools: ads_whoami, ads_list_accounts, ads_list_campaigns, ads_list_adsets, ads_list_ads, and 23 more. Their descriptions and schemas cost roughly 5,128 tokens of context every time the server is loaded.

### Is the Ads Uploader MCP server still maintained?

Ads Uploader is still listed as active in the MCP registry. We last reached this channel on 28 September 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 Ads Uploader MCP server under?

Ads Uploader declares the UNLICENSED licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/@adsuploader/mcp
- Socket report: https://socket.dev/npm/package/@adsuploader/mcp
- Website: https://adsuploader.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-adsuploader-mcp/adsuploader-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-adsuploader-mcp/adsuploader-mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-adsuploader-mcp/adsuploader-mcp
