# io.github.mikusnuz/meta-ads (npm · @mikusnuz/meta-ads-mcp)

MCP server for Meta Marketing API — Facebook & Instagram ad campaign management

- Trust score: 67/100 (medium)
- Change this week: +14
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@mikusnuz/meta-ads-mcp`: 67/100 (this document), [markdown](https://verifymcp.io/servers/mikusnuz-meta-ads/mikusnuz-meta-ads-mcp.md), [page](https://verifymcp.io/servers/mikusnuz-meta-ads/mikusnuz-meta-ads-mcp)

## Channel facts

- Registry: `npm`
- Package: `@mikusnuz/meta-ads-mcp`
- Version: `1.2.1`
- 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-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 112 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 85/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 8658 tokens (~68/item across 126 items; 123 tools + 3 resources), lean.
  - 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**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **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

### Claude

```bash
claude mcp add mikusnuz-meta-ads -- npx -y @mikusnuz/meta-ads-mcp
```

### Codex

```bash
codex mcp add mikusnuz-meta-ads -- npx -y @mikusnuz/meta-ads-mcp
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add mikusnuz-meta-ads --command npx --arg -y --arg @mikusnuz/meta-ads-mcp
```

### Hermes

```yaml
mcp_servers:
  mikusnuz-meta-ads:
    command: "npx"
    args: ["-y", "@mikusnuz/meta-ads-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "mikusnuz-meta-ads": {
      "command": "npx",
      "args": [
        "-y",
        "@mikusnuz/meta-ads-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-08-02 (score 67, +41)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional regression] Security disclosure: fail → unverified
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional] Licence: MIT

### 2026-07-31 (score 26, −27)

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

### 2026-07-27 (score 53)

First indexed and scored.

## MCP tools (123)

### `list_campaigns` (~143 tokens)

List campaigns in the ad account. Supports filtering by status and objective. Returns paginated results.

Input parameters:

- `after` (string): Pagination cursor for next page
- `before` (string): Pagination cursor for previous page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)
- `objective` (string): Filter by objective: OUTCOME_AWARENESS, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_SALES, OUTCOME_TRAFFIC, OUTCOME_APP_PROMOTION
- `status` (string): Filter by status: ACTIVE, PAUSED, DELETED, ARCHIVED

### `get_campaign` (~40 tokens)

Get details of a specific campaign by ID.

Input parameters:

- `campaign_id` (string, required): Campaign ID
- `fields` (string): Comma-separated fields to return

### `create_campaign` (~176 tokens)

Create a new ad campaign. Defaults to PAUSED status. Requires name and objective. Budget can be set at campaign or ad set level.

Input parameters:

- `daily_budget` (string): Daily budget in account currency cents (e.g. '5000' = $50.00)
- `lifetime_budget` (string): Lifetime budget in account currency cents
- `name` (string, required): Campaign name
- `objective` (string, required): Campaign objective
- `special_ad_categories` (string): JSON array of special ad categories: CREDIT, EMPLOYMENT, HOUSING, ISSUES_ELECTIONS_POLITICS
- `start_time` (string): Campaign start time (ISO 8601 format)
- `status` (string): Campaign status (default PAUSED)
- `stop_time` (string): Campaign stop time (ISO 8601 format)

### `update_campaign` (~122 tokens)

Update an existing campaign. Only provided fields will be modified.

Input parameters:

- `campaign_id` (string, required): Campaign ID to update
- `daily_budget` (string): New daily budget in currency cents
- `lifetime_budget` (string): New lifetime budget in currency cents
- `name` (string): New campaign name
- `start_time` (string): New start time (ISO 8601)
- `status` (string): New status: ACTIVE, PAUSED, DELETED, ARCHIVED
- `stop_time` (string): New stop time (ISO 8601)

### `delete_campaign` (~29 tokens)

Delete a campaign. This action is irreversible.

Input parameters:

- `campaign_id` (string, required): Campaign ID to delete

### `get_campaign_adsets` (~69 tokens)

Get all ad sets belonging to a specific campaign.

Input parameters:

- `after` (string): Pagination cursor for next page
- `campaign_id` (string, required): Campaign ID
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `get_campaign_ads` (~67 tokens)

Get all ads belonging to a specific campaign.

Input parameters:

- `after` (string): Pagination cursor for next page
- `campaign_id` (string, required): Campaign ID
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `get_campaign_leads` (~74 tokens)

Get leads generated by a specific campaign. Requires leads_retrieval permission.

Input parameters:

- `after` (string): Pagination cursor for next page
- `campaign_id` (string, required): Campaign ID
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `list_adsets` (~97 tokens)

List ad sets in the ad account. Optionally filter by campaign or status.

Input parameters:

- `after` (string): Pagination cursor for next page
- `campaign_id` (string): Filter by campaign ID
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)
- `status` (string): Filter by status: ACTIVE, PAUSED, DELETED, ARCHIVED

### `get_adset` (~44 tokens)

Get details of a specific ad set by ID.

Input parameters:

- `adset_id` (string, required): Ad set ID
- `fields` (string): Comma-separated fields to return

### `create_adset` (~287 tokens)

Create a new ad set. Requires name, campaign_id, budget, optimization_goal, billing_event, and targeting. Defaults to PAUSED status.

Input parameters:

- `bid_strategy` (string): Bid strategy: LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS
- `billing_event` (string, required): Billing event: IMPRESSIONS, LINK_CLICKS, APP_INSTALLS, THRUPLAY
- `campaign_id` (string, required): Parent campaign ID
- `daily_budget` (string): Daily budget in currency cents (e.g. '5000' = $50.00)
- `end_time` (string): End time (ISO 8601)
- `lifetime_budget` (string): Lifetime budget in currency cents
- `name` (string, required): Ad set name
- `optimization_goal` (string, required): Optimization goal: IMPRESSIONS, REACH, LINK_CLICKS, LANDING_PAGE_VIEWS, OFFSITE_CONVERSIONS, APP_INSTALLS, LEAD_GENERATION, VALUE, THRUPLAY, ENGAGED_USERS
- `start_time` (string): Start time (ISO 8601)
- `status` (string): Ad set status (default PAUSED)
- `targeting` (string, required): JSON string of targeting spec (age_min, age_max, genders, geo_locations, interests, etc.)

### `update_adset` (~154 tokens)

Update an existing ad set. Only provided fields will be modified.

Input parameters:

- `adset_id` (string, required): Ad set ID to update
- `bid_amount` (string): New bid amount in currency cents
- `daily_budget` (string): New daily budget in currency cents
- `end_time` (string): New end time (ISO 8601)
- `lifetime_budget` (string): New lifetime budget in currency cents
- `name` (string): New ad set name
- `start_time` (string): New start time (ISO 8601)
- `status` (string): New status: ACTIVE, PAUSED, DELETED, ARCHIVED
- `targeting` (string): New targeting spec as JSON string

### `delete_adset` (~33 tokens)

Delete an ad set. This action is irreversible.

Input parameters:

- `adset_id` (string, required): Ad set ID to delete

### `get_adset_ads` (~71 tokens)

Get all ads belonging to a specific ad set.

Input parameters:

- `adset_id` (string, required): Ad set ID
- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `get_adset_leads` (~78 tokens)

Get leads generated by a specific ad set. Requires leads_retrieval permission.

Input parameters:

- `adset_id` (string, required): Ad set ID
- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `list_ads` (~113 tokens)

List ads in the ad account. Optionally filter by campaign, ad set, or status.

Input parameters:

- `adset_id` (string): Filter by ad set ID
- `after` (string): Pagination cursor for next page
- `campaign_id` (string): Filter by campaign ID
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)
- `status` (string): Filter by status: ACTIVE, PAUSED, DELETED, ARCHIVED

### `get_ad` (~40 tokens)

Get details of a specific ad by ID.

Input parameters:

- `ad_id` (string, required): Ad ID
- `fields` (string): Comma-separated fields to return

### `create_ad` (~109 tokens)

Create a new ad. Requires name, adset_id, and creative (JSON object_story_spec). Defaults to PAUSED status.

Input parameters:

- `adset_id` (string, required): Parent ad set ID
- `creative` (string, required): JSON string of creative spec (object_story_spec with page_id, link_data/photo_data/video_data)
- `name` (string, required): Ad name
- `status` (string): Ad status (default PAUSED)
- `tracking_specs` (string): JSON string of tracking specs array

### `update_ad` (~89 tokens)

Update an existing ad. Only provided fields will be modified.

Input parameters:

- `ad_id` (string, required): Ad ID to update
- `creative` (string): New creative spec as JSON string
- `name` (string): New ad name
- `status` (string): New status: ACTIVE, PAUSED, DELETED, ARCHIVED
- `tracking_specs` (string): New tracking specs as JSON string

### `delete_ad` (~29 tokens)

Delete an ad. This action is irreversible.

Input parameters:

- `ad_id` (string, required): Ad ID to delete

### `get_ad_preview` (~72 tokens)

Get a preview of an ad in a specific format. Returns HTML iframe for rendering.

Input parameters:

- `ad_format` (string, required): Ad format: DESKTOP_FEED_STANDARD, MOBILE_FEED_STANDARD, INSTAGRAM_STANDARD, INSTAGRAM_STORY, RIGHT_COLUMN_STANDARD, etc.
- `ad_id` (string, required): Ad ID

### `get_delivery_estimate` (~46 tokens)

Get delivery estimate for an ad including estimated daily reach and cost.

Input parameters:

- `ad_id` (string, required): Ad ID
- `optimization_goal` (string): Optimization goal to estimate for

### `list_creatives` (~56 tokens)

List ad creatives in the ad account.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `get_creative` (~42 tokens)

Get details of a specific ad creative by ID.

Input parameters:

- `creative_id` (string, required): Creative ID
- `fields` (string): Comma-separated fields to return

### `create_creative` (~106 tokens)

Create a new ad creative with object_story_spec. The spec defines the ad content (link, photo, or video) and the associated Facebook Page.

Input parameters:

- `asset_feed_spec` (string): JSON string of asset_feed_spec for dynamic creative
- `name` (string, required): Creative name
- `object_story_spec` (string, required): JSON string of object_story_spec (page_id, link_data/photo_data/video_data)
- `url_tags` (string): URL tags to append to all links

### `update_creative` (~59 tokens)

Update an existing ad creative. Only name and url_tags can be modified after creation.

Input parameters:

- `creative_id` (string, required): Creative ID to update
- `name` (string): New creative name
- `url_tags` (string): New URL tags

### `create_dynamic_creative` (~93 tokens)

Create a dynamic creative with asset_feed_spec. Meta automatically combines different images, videos, titles, bodies, and CTAs to find the best performing combinations.

Input parameters:

- `asset_feed_spec` (string, required): JSON string of asset_feed_spec with arrays: images (hash), videos (video_id), bodies (text), titles (text), descriptions (text), call_to_action_types
- `name` (string, required): Creative name

### `list_images` (~56 tokens)

List ad images uploaded to the ad account.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `upload_image` (~40 tokens)

Upload an ad image from a public URL. Returns image hash for use in ad creatives.

Input parameters:

- `url` (string, required): Public URL of the image to upload

### `get_image` (~41 tokens)

Get details of a specific ad image by ID.

Input parameters:

- `fields` (string): Comma-separated fields to return
- `image_id` (string, required): Image ID

### `delete_image` (~31 tokens)

Delete an ad image by hash. This action is irreversible.

Input parameters:

- `hash` (string, required): Image hash to delete

### `list_videos` (~57 tokens)

List ad videos uploaded to the ad account.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `upload_video` (~59 tokens)

Upload an ad video from a public URL. Returns video ID for use in ad creatives.

Input parameters:

- `description` (string): Video description
- `file_url` (string, required): Public URL of the video to upload
- `title` (string): Video title

### `get_video` (~41 tokens)

Get details of a specific ad video by ID.

Input parameters:

- `fields` (string): Comma-separated fields to return
- `video_id` (string, required): Video ID

### `delete_video` (~30 tokens)

Delete an ad video. This action is irreversible.

Input parameters:

- `video_id` (string, required): Video ID to delete

### `list_canvases` (~61 tokens)

List Instant Experience (Canvas) creatives in the ad account.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `get_canvas` (~44 tokens)

Get details of a specific Instant Experience (Canvas) by ID.

Input parameters:

- `canvas_id` (string, required): Canvas ID
- `fields` (string): Comma-separated fields to return

### `create_canvas` (~87 tokens)

Create a new Instant Experience (Canvas) on a Facebook Page. Requires page_id and body_elements JSON array defining the canvas layout.

Input parameters:

- `body_elements` (string, required): JSON array of canvas body elements (buttons, carousels, photos, videos, text, etc.)
- `name` (string): Canvas name
- `page_id` (string, required): Facebook Page ID to create the canvas on

### `delete_canvas` (~32 tokens)

Delete an Instant Experience (Canvas). This action is irreversible.

Input parameters:

- `canvas_id` (string, required): Canvas ID to delete

### `list_custom_audiences` (~58 tokens)

List custom audiences in the ad account.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `get_audience` (~42 tokens)

Get details of a specific custom audience by ID.

Input parameters:

- `audience_id` (string, required): Audience ID
- `fields` (string): Comma-separated fields to return

### `create_custom_audience` (~105 tokens)

Create a new custom audience. Subtype determines the audience source (CUSTOM, WEBSITE, APP, OFFLINE_CONVERSION, LOOKALIKE, ENGAGEMENT, etc.).

Input parameters:

- `customer_file_source` (string): Source of customer file: USER_PROVIDED_ONLY, PARTNER_PROVIDED_ONLY, BOTH_USER_AND_PARTNER_PROVIDED
- `description` (string): Audience description
- `name` (string, required): Audience name
- `subtype` (string, required): Audience subtype

### `update_audience` (~54 tokens)

Update an existing custom audience. Only provided fields will be modified.

Input parameters:

- `audience_id` (string, required): Audience ID to update
- `description` (string): New audience description
- `name` (string): New audience name

### `delete_audience` (~31 tokens)

Delete a custom audience. This action is irreversible.

Input parameters:

- `audience_id` (string, required): Audience ID to delete

### `add_users_to_audience` (~101 tokens)

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

Input parameters:

- `audience_id` (string, required): Audience ID
- `payload` (string, required): JSON string: {schema: ['EMAIL','PHONE',...], data: [['hash1','hash2',...], ...]}. All PII must be SHA-256 hashed.

### `remove_users_from_audience` (~83 tokens)

Remove users from a custom audience. Payload format is the same as add_users_to_audience.

Input parameters:

- `audience_id` (string, required): Audience ID
- `payload` (string, required): JSON string: {schema: ['EMAIL','PHONE',...], data: [['hash1','hash2',...], ...]}. All PII must be SHA-256 hashed.

### `create_lookalike_audience` (~110 tokens)

Create a lookalike audience based on an existing custom audience. Ratio (1-10) determines how closely the new audience resembles the source.

Input parameters:

- `lookalike_spec` (string, required): JSON string: {country: 'US', ratio: 0.01-0.10} where ratio is the lookalike percentage (1%-10%)
- `name` (string, required): Lookalike audience name
- `origin_audience_id` (string, required): Source custom audience ID

### `list_saved_audiences` (~65 tokens)

List saved audiences in the ad account. Saved audiences are reusable targeting presets.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `get_saved_audience` (~44 tokens)

Get details of a specific saved audience by ID.

Input parameters:

- `audience_id` (string, required): Saved audience ID
- `fields` (string): Comma-separated fields to return

### `search_targeting` (~116 tokens)

Search for targeting options (interests, behaviors, demographics, etc.) by keyword. Use this to find valid targeting IDs for ad set targeting specs.

Input parameters:

- `limit` (number): Number of results (default 25)
- `q` (string, required): Search query (e.g. 'fitness', 'technology', 'cooking')
- `type` (string): Targeting type filter: adinterest, adgeolocation, adeducationschool, adeducationmajor, adworkemployer, adworkposition, adlocale, etc.

### `search_locations` (~91 tokens)

Search for geographic locations (countries, regions, cities, zip codes) for ad targeting.

Input parameters:

- `limit` (number): Number of results (default 25)
- `location_types` (string): Comma-separated location types: country, region, city, zip, geo_market, electoral_district
- `q` (string, required): Search query (e.g. 'New York', 'California', 'United States')

### `search_targeting_map` (~49 tokens)

Map targeting IDs to their full details (names, types, paths). Useful for resolving IDs obtained from other endpoints.

Input parameters:

- `targeting_list` (string, required): JSON array of targeting IDs to look up

### `get_reach_estimate` (~49 tokens)

Get estimated audience reach for a given targeting specification. Useful for planning campaigns before creating them.

Input parameters:

- `targeting_spec` (string, required): JSON string of targeting spec (same format as ad set targeting)

### `get_targeting_suggestions` (~48 tokens)

Get targeting suggestions based on existing targeting criteria. Meta suggests related interests, behaviors, and demographics.

Input parameters:

- `targeting_list` (string, required): JSON string of current targeting criteria to get suggestions for

### `get_account_insights` (~190 tokens)

Get performance insights for the ad account. Returns metrics like impressions, clicks, spend, reach, etc.

Input parameters:

- `breakdowns` (string): Breakdown dimensions: age,gender,country,region,placement,device_platform
- `date_preset` (string): Date preset: TODAY,YESTERDAY,LAST_7D,LAST_14D,LAST_30D,THIS_MONTH,LAST_MONTH,THIS_QUARTER,LAST_QUARTER,THIS_YEAR,LAST_YEAR
- `fields` (string): Comma-separated insight fields
- `filtering` (string): JSON string for filtering
- `level` (string): Aggregation level: campaign, adset, ad
- `time_increment` (string): Time granularity: all_days, 1, 7, monthly
- `time_range` (string): JSON string {since,until} in YYYY-MM-DD format

### `get_campaign_insights` (~187 tokens)

Get performance insights for a specific campaign.

Input parameters:

- `breakdowns` (string): Breakdown dimensions: age,gender,country,region,placement,device_platform
- `campaign_id` (string, required): Campaign ID
- `date_preset` (string): Date preset: TODAY,YESTERDAY,LAST_7D,LAST_14D,LAST_30D,THIS_MONTH,LAST_MONTH,THIS_QUARTER,LAST_QUARTER,THIS_YEAR,LAST_YEAR
- `fields` (string): Comma-separated insight fields
- `filtering` (string): JSON string for filtering
- `level` (string): Aggregation level: campaign, adset, ad
- `time_increment` (string): Time granularity: all_days, 1, 7, monthly
- `time_range` (string): JSON string {since,until} in YYYY-MM-DD format

### `get_adset_insights` (~191 tokens)

Get performance insights for a specific ad set.

Input parameters:

- `adset_id` (string, required): Ad Set ID
- `breakdowns` (string): Breakdown dimensions: age,gender,country,region,placement,device_platform
- `date_preset` (string): Date preset: TODAY,YESTERDAY,LAST_7D,LAST_14D,LAST_30D,THIS_MONTH,LAST_MONTH,THIS_QUARTER,LAST_QUARTER,THIS_YEAR,LAST_YEAR
- `fields` (string): Comma-separated insight fields
- `filtering` (string): JSON string for filtering
- `level` (string): Aggregation level: campaign, adset, ad
- `time_increment` (string): Time granularity: all_days, 1, 7, monthly
- `time_range` (string): JSON string {since,until} in YYYY-MM-DD format

### `get_ad_insights` (~187 tokens)

Get performance insights for a specific ad.

Input parameters:

- `ad_id` (string, required): Ad ID
- `breakdowns` (string): Breakdown dimensions: age,gender,country,region,placement,device_platform
- `date_preset` (string): Date preset: TODAY,YESTERDAY,LAST_7D,LAST_14D,LAST_30D,THIS_MONTH,LAST_MONTH,THIS_QUARTER,LAST_QUARTER,THIS_YEAR,LAST_YEAR
- `fields` (string): Comma-separated insight fields
- `filtering` (string): JSON string for filtering
- `level` (string): Aggregation level: campaign, adset, ad
- `time_increment` (string): Time granularity: all_days, 1, 7, monthly
- `time_range` (string): JSON string {since,until} in YYYY-MM-DD format

### `create_async_report` (~190 tokens)

Create an async insight report for large data queries. Returns a report_run_id to poll with get_async_report.

Input parameters:

- `breakdowns` (string): Breakdown dimensions: age,gender,country,region,placement,device_platform
- `date_preset` (string): Date preset: TODAY,YESTERDAY,LAST_7D,LAST_14D,LAST_30D,THIS_MONTH,LAST_MONTH,THIS_QUARTER,LAST_QUARTER,THIS_YEAR,LAST_YEAR
- `fields` (string): Comma-separated insight fields
- `filtering` (string): JSON string for filtering
- `level` (string): Aggregation level: campaign, adset, ad
- `time_increment` (string): Time granularity: all_days, 1, 7, monthly
- `time_range` (string): JSON string {since,until} in YYYY-MM-DD format

### `get_async_report` (~49 tokens)

Check status and retrieve results of an async insight report.

Input parameters:

- `fields` (string): Comma-separated fields to return
- `report_run_id` (string, required): Report run ID from create_async_report

### `get_form_leads` (~67 tokens)

Get leads submitted through a lead generation form.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `form_id` (string, required): Lead form ID
- `limit` (number): Number of results to return

### `get_lead` (~41 tokens)

Get details of a specific lead by ID.

Input parameters:

- `fields` (string): Comma-separated fields to return
- `lead_id` (string, required): Lead ID

### `list_lead_forms` (~67 tokens)

List lead generation forms for a Facebook Page.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results to return
- `page_id` (string, required): Facebook Page ID

### `get_lead_form` (~43 tokens)

Get details of a specific lead generation form.

Input parameters:

- `fields` (string): Comma-separated fields to return
- `form_id` (string, required): Lead form ID

### `list_catalogs` (~54 tokens)

List product catalogs for the ad account.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results to return

### `get_catalog` (~40 tokens)

Get details of a specific product catalog.

Input parameters:

- `catalog_id` (string, required): Product catalog ID
- `fields` (string): Comma-separated fields to return

### `create_catalog` (~50 tokens)

Create a new product catalog for the ad account.

Input parameters:

- `name` (string, required): Catalog name
- `vertical` (string): Catalog vertical: commerce, hotels, flights, destinations, home_listings, vehicles

### `update_catalog` (~35 tokens)

Update an existing product catalog.

Input parameters:

- `catalog_id` (string, required): Product catalog ID
- `name` (string): New catalog name

### `list_product_sets` (~64 tokens)

List product sets within a catalog.

Input parameters:

- `after` (string): Pagination cursor for next page
- `catalog_id` (string, required): Product catalog ID
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results to return

### `create_product_set` (~55 tokens)

Create a new product set within a catalog.

Input parameters:

- `catalog_id` (string, required): Product catalog ID
- `filter` (string): JSON string of filter rules for the product set
- `name` (string, required): Product set name

### `get_product_set` (~41 tokens)

Get details of a specific product set.

Input parameters:

- `fields` (string): Comma-separated fields to return
- `set_id` (string, required): Product set ID

### `update_product_set` (~50 tokens)

Update an existing product set.

Input parameters:

- `filter` (string): JSON string of updated filter rules
- `name` (string): New product set name
- `set_id` (string, required): Product set ID

### `list_products` (~74 tokens)

List products within a catalog.

Input parameters:

- `after` (string): Pagination cursor for next page
- `catalog_id` (string, required): Product catalog ID
- `fields` (string): Comma-separated fields to return
- `filter` (string): JSON string of filter rules
- `limit` (number): Number of results to return

### `get_product` (~38 tokens)

Get details of a specific product.

Input parameters:

- `fields` (string): Comma-separated fields to return
- `product_id` (string, required): Product ID

### `update_product` (~100 tokens)

Update an existing product in a catalog.

Input parameters:

- `availability` (string): Product availability: in stock, out of stock, etc.
- `description` (string): Product description
- `image_url` (string): Product image URL
- `name` (string): Product name
- `price` (string): Product price (e.g. '9.99 USD')
- `product_id` (string, required): Product ID
- `url` (string): Product URL

### `list_feeds` (~64 tokens)

List product feeds for a catalog.

Input parameters:

- `after` (string): Pagination cursor for next page
- `catalog_id` (string, required): Product catalog ID
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results to return

### `create_feed` (~63 tokens)

Create a new product feed for a catalog.

Input parameters:

- `catalog_id` (string, required): Product catalog ID
- `file_url` (string): URL of the feed file
- `name` (string, required): Feed name
- `schedule` (string): JSON string for feed schedule configuration

### `upload_feed` (~45 tokens)

Upload/trigger a feed file upload for a product feed.

Input parameters:

- `feed_id` (string, required): Product feed ID
- `url` (string, required): URL of the feed file to upload

### `get_feed_uploads` (~66 tokens)

Get upload history for a product feed.

Input parameters:

- `after` (string): Pagination cursor for next page
- `feed_id` (string, required): Product feed ID
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results to return

### `list_rules` (~53 tokens)

List automated rules for the ad account.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results to return

### `get_rule` (~39 tokens)

Get details of a specific automated rule.

Input parameters:

- `fields` (string): Comma-separated fields to return
- `rule_id` (string, required): Rule ID

### `create_rule` (~66 tokens)

Create a new automated rule for the ad account.

Input parameters:

- `evaluation_spec` (string, required): JSON string defining rule conditions
- `execution_spec` (string, required): JSON string defining rule actions
- `name` (string, required): Rule name
- `schedule_spec` (string): JSON string defining rule schedule

### `update_rule` (~91 tokens)

Update an existing automated rule.

Input parameters:

- `evaluation_spec` (string): JSON string defining updated rule conditions
- `execution_spec` (string): JSON string defining updated rule actions
- `name` (string): New rule name
- `rule_id` (string, required): Rule ID
- `schedule_spec` (string): JSON string defining updated rule schedule
- `status` (string): Rule status: ENABLED, DISABLED

### `delete_rule` (~23 tokens)

Delete an automated rule.

Input parameters:

- `rule_id` (string, required): Rule ID

### `list_experiments` (~61 tokens)

List A/B test experiments (ad studies) for the ad account.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results to return

### `create_experiment` (~101 tokens)

Create a new A/B test experiment (ad study).

Input parameters:

- `cells` (string, required): JSON array of test cells: [{name, campaign_id}]
- `description` (string): Experiment description
- `end_time` (string, required): End time in ISO 8601 or Unix timestamp
- `name` (string, required): Experiment name
- `start_time` (string, required): Start time in ISO 8601 or Unix timestamp
- `type` (string): Study type

### `get_experiment` (~46 tokens)

Get details of a specific experiment (ad study).

Input parameters:

- `experiment_id` (string, required): Experiment (ad study) ID
- `fields` (string): Comma-separated fields to return

### `update_experiment` (~51 tokens)

Update an existing experiment (ad study).

Input parameters:

- `description` (string): New experiment description
- `experiment_id` (string, required): Experiment (ad study) ID
- `name` (string): New experiment name

### `get_experiment_results` (~48 tokens)

Get results/cells of an experiment (ad study).

Input parameters:

- `experiment_id` (string, required): Experiment (ad study) ID
- `fields` (string): Comma-separated fields to return

### `send_conversion_event` (~50 tokens)

Send a server-side conversion event via the Conversions API (pixel).

Input parameters:

- `events` (string, required): JSON array of events: [{event_name, event_time, user_data, custom_data, action_source}]

### `send_offline_event` (~46 tokens)

Send an offline conversion event to an offline event set.

Input parameters:

- `event_set_id` (string, required): Offline event set ID
- `events` (string, required): JSON array of offline events

### `list_offline_event_sets` (~58 tokens)

List offline conversion data sets for the ad account.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results to return

### `create_offline_event_set` (~39 tokens)

Create a new offline conversion data set.

Input parameters:

- `description` (string): Event set description
- `name` (string, required): Event set name

### `list_budget_schedules` (~63 tokens)

List ad budget schedules for the ad account. Returns paginated results.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `create_budget_schedule` (~96 tokens)

Create a new ad budget schedule for the ad account.

Input parameters:

- `budget_value` (string, required): Budget amount in account currency cents
- `budget_value_type` (string, required): Budget value type (e.g. ABSOLUTE, MULTIPLIER)
- `time_end` (string, required): Schedule end time (ISO 8601 or Unix timestamp)
- `time_start` (string, required): Schedule start time (ISO 8601 or Unix timestamp)

### `update_budget_schedule` (~74 tokens)

Update an existing budget schedule. Only provided fields will be modified.

Input parameters:

- `budget_value` (string): New budget amount in account currency cents
- `schedule_id` (string, required): Budget schedule ID to update
- `time_end` (string): New schedule end time
- `time_start` (string): New schedule start time

### `delete_budget_schedule` (~32 tokens)

Delete a budget schedule. This action is irreversible.

Input parameters:

- `schedule_id` (string, required): Budget schedule ID to delete

### `list_rf_predictions` (~63 tokens)

List reach & frequency predictions for the ad account. Returns paginated results.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `create_rf_prediction` (~125 tokens)

Create a new reach & frequency prediction. Provide targeting spec as JSON string, budget in cents, and scheduling info.

Input parameters:

- `budget` (number, required): Budget in account currency cents
- `destination_id` (string, required): Destination ID (e.g. Facebook Page ID)
- `frequency_cap` (number, required): Maximum frequency cap per user
- `start_time` (string, required): Prediction start time (ISO 8601 or Unix timestamp)
- `stop_time` (string, required): Prediction stop time (ISO 8601 or Unix timestamp)
- `target_spec` (string, required): JSON string of targeting specification

### `get_rf_prediction` (~44 tokens)

Get details of a specific reach & frequency prediction by ID.

Input parameters:

- `fields` (string): Comma-separated fields to return
- `prediction_id` (string, required): Prediction ID

### `delete_rf_prediction` (~33 tokens)

Delete a reach & frequency prediction. This action is irreversible.

Input parameters:

- `prediction_id` (string, required): Prediction ID to delete

### `list_block_lists` (~62 tokens)

List publisher block lists for the ad account. Returns paginated results.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `create_block_list` (~32 tokens)

Create a new publisher block list for the ad account.

Input parameters:

- `name` (string, required): Name for the block list

### `add_to_block_list` (~56 tokens)

Add publisher URLs to an existing block list.

Input parameters:

- `list_id` (string, required): Block list ID
- `urls` (string, required): JSON array of URLs to block (e.g. '["example.com","bad-site.com"]')

### `remove_from_block_list` (~52 tokens)

Remove publisher URLs from an existing block list.

Input parameters:

- `list_id` (string, required): Block list ID
- `urls` (string, required): JSON array of URLs to remove (e.g. '["example.com"]')

### `delete_block_list` (~33 tokens)

Delete a publisher block list. This action is irreversible.

Input parameters:

- `list_id` (string, required): Block list ID to delete

### `get_ad_account` (~42 tokens)

Get details of the configured ad account including status, balance, currency, timezone, and spend info.

Input parameters:

- `fields` (string): Comma-separated fields to return

### `list_ad_accounts` (~63 tokens)

List all ad accounts accessible by the current user. Returns paginated results.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `update_ad_account` (~80 tokens)

Update the configured ad account settings. Only provided fields will be modified.

Input parameters:

- `name` (string): New account name
- `spend_cap` (string): Account spend cap in currency cents (e.g. '100000' = $1000.00)
- `timezone_name` (string): New timezone (e.g. 'America/New_York')

### `get_account_activities` (~70 tokens)

Get activity log for the ad account. Shows changes made to campaigns, ad sets, ads, etc.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `list_account_users` (~63 tokens)

List users who have access to the ad account with their roles and permissions.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `list_businesses` (~62 tokens)

List all businesses accessible by the current user. Returns paginated results.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `get_business` (~40 tokens)

Get details of a specific business by ID.

Input parameters:

- `business_id` (string, required): Business ID
- `fields` (string): Comma-separated fields to return

### `list_business_ad_accounts` (~66 tokens)

List ad accounts owned by the configured business. Requires META_BUSINESS_ID env var.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `list_business_users` (~63 tokens)

List users of the configured business. Requires META_BUSINESS_ID env var.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `add_business_user` (~53 tokens)

Add a user to the configured business by email. Requires META_BUSINESS_ID env var.

Input parameters:

- `email` (string, required): Email address of the user to add
- `role` (string, required): Role for the new user

### `remove_business_user` (~40 tokens)

Remove a user from the configured business. Requires META_BUSINESS_ID env var.

Input parameters:

- `user_id` (string, required): User ID to remove from the business

### `list_system_users` (~64 tokens)

List system users of the configured business. Requires META_BUSINESS_ID env var.

Input parameters:

- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)

### `create_system_user` (~51 tokens)

Create a new system user in the configured business. Requires META_BUSINESS_ID env var.

Input parameters:

- `name` (string, required): Name for the system user
- `role` (string, required): Role for the system user

### `exchange_token` (~48 tokens)

Exchange a short-lived access token for a long-lived token. Requires META_APP_ID and META_APP_SECRET to be configured.

Input parameters:

- `short_lived_token` (string, required): Short-lived access token to exchange

### `refresh_token` (~42 tokens)

Refresh a long-lived access token to extend its expiration. Returns a new long-lived token.

Input parameters:

- `long_lived_token` (string, required): Long-lived access token to refresh

### `debug_token` (~47 tokens)

Debug an access token to inspect its properties, permissions, expiration, and validity. Requires META_APP_ID and META_APP_SECRET.

Input parameters:

- `input_token` (string, required): Access token to debug/inspect

### `search_ad_library` (~160 tokens)

Search the Meta Ad Library for ads. Allows searching by keywords, countries, and ad type. Useful for competitive research and transparency.

Input parameters:

- `ad_reached_countries` (string, required): Comma-separated country codes where ads were shown (e.g. 'US,GB,KR')
- `ad_type` (string): Ad type filter: ALL, POLITICAL_AND_ISSUE_ADS, HOUSING_ADS, etc.
- `after` (string): Pagination cursor for next page
- `fields` (string): Comma-separated fields to return
- `limit` (number): Number of results (default 25)
- `order_by` (string): Sort order for results
- `search_terms` (string, required): Keywords to search for in ads

## Diagnostics

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

## Score history

- 2026-08-03: 67
- 2026-08-02: 67
- 2026-08-01: 26
- 2026-07-31: 26
- 2026-07-30: 53
- 2026-07-28: 53
- 2026-07-27: 53

## Links

- npm package: https://www.npmjs.com/package/@mikusnuz/meta-ads-mcp
- Socket report: https://socket.dev/npm/package/@mikusnuz/meta-ads-mcp
- Repository: https://github.com/mikusnuz/meta-ads-mcp
- Changelog RSS feed: https://verifymcp.io/servers/mikusnuz-meta-ads/mikusnuz-meta-ads-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/mikusnuz-meta-ads/mikusnuz-meta-ads-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/mikusnuz-meta-ads/mikusnuz-meta-ads-mcp
