# @mikusnuz/meta-ads-mcp

MCP server for Meta Marketing API v26.0 — 134 tools for Facebook & Instagram ad campaign management

- **Type:** MCP server
- **Trust:** 60/100 (B), scored on the package rubric
- **Verification:** community-indexed — nobody has claimed this listing
- **Version:** 1.5.0
- **Author:** mikusnuz
- **License:** MIT
- **npm:** @mikusnuz/meta-ads-mcp
- **Source:** https://github.com/mikusnuz/meta-ads-mcp
- **Compatible clients:** claude-code, cursor, copilot, gemini (basis: transport)

## Trust

60/100 (B), scored on the package rubric
- Publisher verified: no
- Install scripts: nothing suspicious found
- Prompt-injection scan: not run
- Obfuscation scan: not run
- Evidence age: 1 day

## Security scan

- **Status:** clean
- **Scanned:** 2026-10-13T23:16:20.947Z
- **Version scanned:** 1.5.0
- **CVEs:** none found by OSV at scan time

## Tools

40 declared. Statically extracted from the shipped source — a floor on the surface, not a census.
- `get_ad_account` — Get details of the configured ad account including status, balance, currency, timezone, and spend info.
- `list_ad_accounts` — List all ad accounts accessible by the current user. Returns paginated results.
- `update_ad_account` — Update the configured ad account settings. Only provided fields will be modified.
- `get_account_activities` — Get activity log for the ad account. Shows changes made to campaigns, ad sets, ads, etc.
- `list_account_users` — List users who have access to the ad account with their roles and permissions.
- `search_ad_library` — Search the Meta Ad Library for ads. Allows searching by keywords, countries, and ad type. Useful for competitive research and transparency.
- `list_ads` — List ads in the ad account. Optionally filter by campaign, ad set, or status.
- `get_ad` — Get details of a specific ad by ID.
- `create_ad` — Create a new ad. Requires name, adset_id, and creative (JSON object_story_spec). Defaults to PAUSED status.
- `update_ad` — Update an existing ad. Only provided fields will be modified.
- `delete_ad` — Delete an ad. This action is irreversible.
- `copy_ad` — Copy an existing ad. Creates a duplicate within the same or different ad set.
- `get_ad_preview` — Get a preview of an ad in a specific format. Returns HTML iframe for rendering.
- `get_delivery_estimate` — Get delivery estimate for an ad set, including estimated daily reach. Note: the delivery_estimate edge exists on the ad set (and ad account) node, not on indivi
- `list_adsets` — List ad sets in the ad account. Optionally filter by campaign or status.
- `get_adset` — Get details of a specific ad set by ID.
- `create_adset` — Create a new ad set. Requires name, campaign_id, budget, optimization_goal, billing_event, and targeting. Defaults to PAUSED status.
- `update_adset` — Update an existing ad set. Only provided fields will be modified.
- `delete_adset` — Delete an ad set. This action is irreversible.
- `copy_adset` — Copy an existing ad set. Creates a duplicate within the same or different campaign.
- `get_adset_targeting_sentence` — Get human-readable targeting description for an ad set. Converts targeting spec into readable sentences.
- `get_adset_ads` — Get all ads belonging to a specific ad set.
- `get_adset_leads` — Get leads generated by a specific ad set. Requires leads_retrieval permission.
- `list_custom_audiences` — List custom audiences in the ad account.
- `get_audience` — Get details of a specific custom audience by ID.
- `create_custom_audience` — Create a new custom audience. Subtype determines the audience source (CUSTOM, WEBSITE, APP, OFFLINE_CONVERSION, LOOKALIKE, ENGAGEMENT, etc.).
- `update_audience` — Update an existing custom audience. Only provided fields will be modified.
- `delete_audience` — Delete a custom audience. This action is irreversible.
- `add_users_to_audience` — Add users to a custom audience. Payload must be a JSON string containing hashed user data with a schema array defining the data types (e.g. EMAIL, PHONE, FN, LN
- `remove_users_from_audience` — Remove users from a custom audience. Payload format is the same as add_users_to_audience.
- `create_lookalike_audience` — Create a lookalike audience based on an existing custom audience. Ratio (1-10) determines how closely the new audience resembles the source.
- `get_audience_health` — Get health status and delivery readiness of a custom audience. Shows match rate, size, and operation status.
- `list_saved_audiences` — List saved audiences in the ad account. Saved audiences are reusable targeting presets.
- `get_saved_audience` — Get details of a specific saved audience by ID.
- `exchange_token` — Exchange a short-lived access token for a long-lived token. Requires META_APP_ID and META_APP_SECRET to be configured.
- `refresh_token` — Extend a valid long-lived user access token through Meta's documented token exchange flow. Requires META_APP_ID and META_APP_SECRET.
- `debug_token` — Debug an access token to inspect its properties, permissions, expiration, and validity. Requires META_APP_ID and META_APP_SECRET.
- `list_block_lists` — List publisher block lists for the ad account. Returns paginated results.
- `create_block_list` — Create a new publisher block list for the ad account.
- `add_to_block_list` — Add publisher URLs to an existing block list.

## Install

**Verdict: review** — Installable, but 1 thing to check first: No publisher has proved control of this listing; it is indexed, not vouched for.
**Cautions** (coverage gaps and advisories — never blocking)
- No publisher has proved control of this listing; it is indexed, not vouched for.
**Config** (claude-code):
```json
"{\n  \"mcpServers\": {\n    \"meta-ads\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@mikusnuz/meta-ads-mcp\"\n      ],\n      \"env\": {\n        \"META_ADS_ACCESS_TOKEN\": \"<YOUR_META_ADS_ACCESS_TOKEN>\",\n        \"META_APP_SECRET\": \"<YOUR_META_APP_SECRET>\"\n      }\n    }\n  }\n}"
```
**Credentials it will ask for** (names only — Forge never holds a value):
- `META_ADS_ACCESS_TOKEN` — Meta Ads Access Token (required)
- `META_APP_SECRET` — Meta App Secret (optional)
Placeholders only. Forge never holds, brokers, or transmits a credential value — replace each <YOUR_NAME> in your own config file. Do not send a value back to Forge; no Forge endpoint accepts one.
- This entry needs 2 credentials (1 required). The generated config carries placeholders, so it will fail in the editor rather than at runtime if they are left unset.

## Blast radius

Extensive blast radius — deletes data; holds an api key.
- Floor 57, ceiling 57 (tier: extensive)
- This is impact, not likelihood. A high radius is not a defect: a filesystem server is supposed to write files. It is never part of the trust score.

## Machine-readable views of this entry

- Signed JSON: https://forgeregistry.com/api/v1/packages/%40mikusnuz%2Fmeta-ads-mcp
- Install plan: https://forgeregistry.com/api/v1/packages/%40mikusnuz%2Fmeta-ads-mcp/install-plan
- Alternatives: https://forgeregistry.com/api/v1/alternatives/%40mikusnuz%2Fmeta-ads-mcp
- HTML page: https://forgeregistry.com/registry/%40mikusnuz%2Fmeta-ads-mcp
- MCP: POST https://forgeregistry.com/api/mcp → `forge_get_package` / `forge_install_plan`

## About this document

Generated by Forge (https://forgeregistry.com) — a compact rendering of the same record served, signed, at the JSON URL above. Trust and scan facts are the registry's own measurements; anything Forge did not measure is named as unmeasured rather than omitted.
