Ads Uploader
NPM · @ADSUPLOADER/MCP · 2 COMPONENTS · SCANNED SEP 28
Meta ads bulk launcher: upload creatives, edit builds, preview, and create paused ads.
Available components
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 Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 92 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency10
- Repository check failed: no source repository is declared. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: the license (UNLICENSED) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 6 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability65
- AI-judged instruction clarity (excellent).Pass
- 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. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage90
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 71% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 28 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
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.
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.
npm · @adsuploader/mcp
claude mcp add com-adsuploader-mcp -- npx -y @adsuploader/mcp
{
"mcpServers": {
"com-adsuploader-mcp": {
"command": "npx",
"args": [
"-y",
"@adsuploader/mcp"
]
}
}
} {
"servers": {
"com-adsuploader-mcp": {
"command": "npx",
"args": [
"-y",
"@adsuploader/mcp"
]
}
}
} codex mcp add com-adsuploader-mcp -- npx -y @adsuploader/mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-adsuploader-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"@adsuploader/mcp"
],
"enabled": true
}
}
} openclaw mcp add com-adsuploader-mcp --command npx --arg -y --arg @adsuploader/mcp
mcp_servers:
com-adsuploader-mcp:
command: "npx"
args: ["-y", "@adsuploader/mcp"] {
"McpServers": {
"com-adsuploader-mcp": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@adsuploader/mcp"
]
}
}
} assistant mcp add com-adsuploader-mcp -t stdio -c npx -a -y @adsuploader/mcp
{
"mcpServers": {
"com-adsuploader-mcp": {
"command": "npx",
"args": [
"-y",
"@adsuploader/mcp"
]
}
}
} 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.
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 22 Sept 26 +15
- Malware scan: unverified → pass ▲ security
- 21 Sept 26 45
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 28 Sept 2026 · Analysed npm/@adsuploader/mcp@0.3.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 92 packages
| Packages resolved | 92 |
|---|---|
| Stale | 31 |
| 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 →
ads_cancel_job Cancel job ~42
Cancel a running ad creation job or media ingest job.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | Ad creation job ID or media ingest job ID (ingest_...). |
No output schema declared.
No examples provided.
ads_create Create Meta ads ~855
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | – | – |
No output schema declared.
No examples provided.
ads_delete_build Delete saved build ~35
Delete one saved build by ID.
| Name | Type | Req | Description |
|---|---|---|---|
| buildId | string | yes | Saved build ID, e.g. build_abc123... |
No output schema declared.
No examples provided.
ads_duplicate_by_post Duplicate ads by post ~377
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | 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. |
No output schema declared.
No examples provided.
ads_duplicate_by_post_preview Preview duplication by post ~349
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | 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. |
No output schema declared.
No examples provided.
ads_fork_build Fork saved build ~111
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.
| Name | Type | Req | Description |
|---|---|---|---|
| buildId | string | yes | Saved build ID to duplicate, e.g. build_abc123... |
No output schema declared.
No examples provided.
ads_get_ad Get ad details ~46
Get one ad with its creative details.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Ad account ID, e.g. act_123. |
| adId | string | yes | Meta ad ID. |
No output schema declared.
No examples provided.
ads_get_build Get saved build ~73
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.
| Name | Type | Req | Description |
|---|---|---|---|
| buildId | string | yes | Saved build ID, e.g. build_abc123... |
No output schema declared.
No examples provided.
ads_get_duplication Get duplication status ~47
Get or resume a duplication job by jobId. After ads_duplicate_by_post returns still_running, poll until complete is true.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | Duplication job ID. |
No output schema declared.
No examples provided.
ads_get_job Get job status ~74
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.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | Ad creation job ID. |
| operations | string | – | Use recent for the last 20 operations or full for the complete operation log. |
No output schema declared.
No examples provided.
ads_get_preset Get preset ~48
Get one saved preset by ID.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Ad account ID, e.g. act_123. |
| presetId | string | yes | Ads Uploader preset ID. |
No output schema declared.
No examples provided.
ads_get_upload Get upload status ~92
Get a completed upload batch by batchId, or poll a background media-ingest job by jobId until complete is true.
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
No output schema declared.
No examples provided.
ads_list_accounts List ad accounts ~22
List Meta ad accounts available to the authenticated Ads Uploader user.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ads_list_ads List ads ~100
List ads in an ad set.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Ad account ID, e.g. act_123. |
| adSetId | string | yes | 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. |
No output schema declared.
No examples provided.
ads_list_adsets List ad sets ~101
List ad sets in a campaign.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Ad account ID, e.g. act_123. |
| campaignId | string | yes | 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. |
No output schema declared.
No examples provided.
ads_list_builds List saved builds ~59
List saved uploader builds for the authenticated user, optionally filtered by ad account.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | – | Optional ad account ID filter, e.g. act_123. |
| limit | integer | – | – |
| offset | integer | – | – |
No output schema declared.
No examples provided.
ads_list_campaigns List campaigns ~96
List campaigns in an ad account, optionally filtered by name search and status.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | 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. |
No output schema declared.
No examples provided.
ads_list_pages List Facebook Pages ~60
List Facebook Pages (with their connected Instagram accounts) available for profile overrides in an ad account.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Ad account ID, e.g. act_123. |
| limit | integer | – | – |
| offset | integer | – | – |
No output schema declared.
No examples provided.
ads_list_presets List presets ~61
List saved API or ad text presets for an ad account.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Ad account ID, e.g. act_123. |
| limit | integer | – | – |
| offset | integer | – | – |
| type | string | – | – |
No output schema declared.
No examples provided.
ads_list_uploads List upload batches ~52
List recent media upload batches for an ad account.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Ad account ID, e.g. act_123. |
| limit | integer | – | – |
| offset | integer | – | – |
No output schema declared.
No examples provided.
ads_preview Preview ad creation ~706
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | – | – |
No output schema declared.
No examples provided.
ads_save_build Save build ~422
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
No output schema declared.
No examples provided.
ads_save_preset Save preset ~75
Save an existing ad as a reusable API preset.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Ad account ID, e.g. act_123. |
| fromAdId | string | yes | Existing Meta ad ID to save as a preset. |
| name | string | yes | Preset name. |
| shareWithTeam | boolean | – | – |
No output schema declared.
No examples provided.
ads_search_targeting Search targeting options ~166
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Ad account ID, e.g. act_123. |
| limit | integer | – | – |
| query | string | yes | City name, zip/postal code, or detailed-targeting keyword to search. |
| type | string | yes | Use city to find targeting.cities[].key values, zip to find targeting.zips[].key values, or detailed to find detailedTargetingGroups selections. |
No output schema declared.
No examples provided.
ads_update_build Update saved build ~633
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.
| Name | Type | Req | Description |
|---|---|---|---|
| buildId | string | yes | 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… |
No output schema declared.
No examples provided.
ads_upload Upload media ~226
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | 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. |
No output schema declared.
No examples provided.
ads_upload_finalize Finalize media upload ~138
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Ad account ID, e.g. act_123. |
| batchId | string | yes | 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. |
No output schema declared.
No examples provided.
ads_whoami Show authenticated user ~62
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
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.