meta-ads-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| META_APP_ID | No | App ID — required for token exchange/debug | |
| META_PIXEL_ID | No | Pixel ID — required for conversion tools | |
| META_APP_SECRET | No | App secret — required for token exchange/debug | |
| META_BUSINESS_ID | No | Business Manager ID — required for business tools | |
| META_AD_ACCOUNT_ID | Yes | Ad account ID (numeric, without act_ prefix) | |
| META_ADS_ACCESS_TOKEN | Yes | Meta Marketing API access token |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_campaignsB | List campaigns in the ad account. Supports filtering by status and objective. Returns paginated results. |
| get_campaignA | Get details of a specific campaign by ID. |
| create_campaignA | Create a new ad campaign. Defaults to PAUSED status. Requires name and objective. Budget can be set at campaign or ad set level. |
| update_campaignB | Update an existing campaign. Only provided fields will be modified. |
| delete_campaignA | Delete a campaign. This action is irreversible. |
| copy_campaignA | Copy an existing campaign. Creates a duplicate with optional name override. Copies structure including ad sets and ads. |
| get_campaign_adsetsA | Get all ad sets belonging to a specific campaign. |
| get_campaign_adsA | Get all ads belonging to a specific campaign. |
| get_campaign_leadsA | Get leads generated by a specific campaign. Requires leads_retrieval permission. |
| list_adsetsB | List ad sets in the ad account. Optionally filter by campaign or status. |
| get_adsetC | Get details of a specific ad set by ID. |
| create_adsetB | Create a new ad set. Requires name, campaign_id, budget, optimization_goal, billing_event, and targeting. Defaults to PAUSED status. |
| update_adsetB | Update an existing ad set. Only provided fields will be modified. |
| delete_adsetA | Delete an ad set. This action is irreversible. |
| copy_adsetA | Copy an existing ad set. Creates a duplicate within the same or different campaign. |
| get_adset_targeting_sentenceB | Get human-readable targeting description for an ad set. Converts targeting spec into readable sentences. |
| get_adset_adsA | Get all ads belonging to a specific ad set. |
| get_adset_leadsA | Get leads generated by a specific ad set. Requires leads_retrieval permission. |
| list_adsB | List ads in the ad account. Optionally filter by campaign, ad set, or status. |
| get_adA | Get details of a specific ad by ID. |
| create_adC | Create a new ad. Requires name, adset_id, and creative (JSON object_story_spec). Defaults to PAUSED status. |
| update_adA | Update an existing ad. Only provided fields will be modified. |
| delete_adA | Delete an ad. This action is irreversible. |
| copy_adA | Copy an existing ad. Creates a duplicate within the same or different ad set. |
| get_ad_previewB | Get a preview of an ad in a specific format. Returns HTML iframe for rendering. |
| get_delivery_estimateA | 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 individual ads. Also note: as of v26.0, the daily_outcomes_curve, budget_guardrail, and estimate_dau fields are no longer returned (removed with no replacement). |
| list_creativesC | List ad creatives in the ad account. |
| get_creativeA | Get details of a specific ad creative by ID. |
| create_creativeA | Create a new ad creative with object_story_spec. The spec defines the ad content (link, photo, or video) and the associated Facebook Page. Notes for v26.0: poll_spec and the poll type under interactive_components_spec are no longer supported and will be rejected. If the advertiser has a shop, eligible creatives now default to destination_spec.destination_type=WEBSITE_AND_SHOP — set it to WEBSITE_AND_SHOP_OPT_OUT to opt out. |
| update_creativeA | Update an existing ad creative. Only name and url_tags can be modified after creation. |
| create_dynamic_creativeA | Create a dynamic creative with asset_feed_spec. Meta automatically combines different images, videos, titles, bodies, and CTAs to find the best performing combinations. |
| generate_previewA | Generate an ad preview without needing an existing ad. Provide creative spec directly to see how it would look. |
| list_imagesC | List ad images uploaded to the ad account. |
| upload_imageA | Upload an ad image from a public URL or a local file. Returns image hash for use in ad creatives. Note: fetching from a URL requires the app to have Meta's URL-fetch capability — if that fails with an OAuthException 'Application does not have the capability to make this API call', use file_path to upload the raw bytes instead, which does not require that capability. |
| get_imageA | Get details of a specific ad image by ID. |
| delete_imageB | Delete an ad image by hash. This action is irreversible. |
| list_videosB | List ad videos uploaded to the ad account. |
| upload_videoB | Upload an ad video from a public URL or a local file. Returns video ID for use in ad creatives. |
| get_videoA | Get details of a specific ad video by ID. |
| delete_videoA | Delete an ad video. This action is irreversible. |
| list_canvasesB | List Instant Experience (Canvas) creatives in the ad account. |
| get_canvasA | Get details of a specific Instant Experience (Canvas) by ID. |
| create_canvasB | Create a new Instant Experience (Canvas) on a Facebook Page. Requires page_id and body_elements JSON array defining the canvas layout. |
| delete_canvasA | Delete an Instant Experience (Canvas). This action is irreversible. |
| list_custom_audiencesC | List custom audiences in the ad account. |
| get_audienceA | Get details of a specific custom audience by ID. |
| create_custom_audienceB | Create a new custom audience. Subtype determines the audience source (CUSTOM, WEBSITE, APP, OFFLINE_CONVERSION, LOOKALIKE, ENGAGEMENT, etc.). |
| update_audienceA | Update an existing custom audience. Only provided fields will be modified. |
| delete_audienceA | Delete a custom audience. This action is irreversible. |
| add_users_to_audienceA | 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_audienceB | Remove users from a custom audience. Payload format is the same as add_users_to_audience. |
| create_lookalike_audienceB | Create a lookalike audience based on an existing custom audience. Ratio (1-10) determines how closely the new audience resembles the source. |
| get_audience_healthA | Get health status and delivery readiness of a custom audience. Shows match rate, size, and operation status. |
| list_saved_audiencesB | List saved audiences in the ad account. Saved audiences are reusable targeting presets. |
| get_saved_audienceA | Get details of a specific saved audience by ID. |
| search_targetingA | Search for targeting options (interests, behaviors, demographics, etc.) by keyword. Use this to find valid targeting IDs for ad set targeting specs. |
| search_locationsB | Search for geographic locations (countries, regions, cities, zip codes) for ad targeting. |
| search_targeting_mapA | Map targeting IDs to their full details (names, types, paths). Useful for resolving IDs obtained from other endpoints. |
| get_reach_estimateB | Get estimated audience reach for a given targeting specification. Useful for planning campaigns before creating them. |
| get_targeting_suggestionsB | Get targeting suggestions based on existing targeting criteria. Meta suggests related interests, behaviors, and demographics. |
| get_account_insightsC | Get performance insights for the ad account. Returns metrics like impressions, clicks, spend, reach, etc. |
| get_campaign_insightsC | Get performance insights for a specific campaign. |
| get_adset_insightsB | Get performance insights for a specific ad set. |
| get_ad_insightsC | Get performance insights for a specific ad. |
| create_async_reportA | Create an async insight report for large data queries. Returns a report_run_id to poll with get_async_report. |
| get_async_reportB | Check status and retrieve results of an async insight report. |
| get_form_leadsB | Get leads submitted through a lead generation form. |
| get_leadA | Get details of a specific lead by ID. |
| list_lead_formsB | List lead generation forms for a Facebook Page. |
| create_lead_formB | Create a new lead generation form on a Facebook Page. Requires pages_manage_ads permission. |
| get_lead_formC | Get details of a specific lead generation form. |
| list_catalogsB | List product catalogs for the ad account. |
| get_catalogB | Get details of a specific product catalog. |
| create_catalogB | Create a new product catalog for the ad account. |
| update_catalogC | Update an existing product catalog. |
| list_product_setsB | List product sets within a catalog. |
| create_product_setB | Create a new product set within a catalog. |
| get_product_setA | Get details of a specific product set. |
| update_product_setC | Update an existing product set. |
| list_productsB | List products within a catalog. |
| get_productA | Get details of a specific product. |
| update_productB | Update an existing product in a catalog. |
| batch_productsA | Batch create, update, or delete products in a catalog. Supports up to 5,000 items per request. Update operations support upsert. |
| get_batch_statusC | Check the status of a catalog batch operation. |
| list_feedsA | List product feeds for a catalog. |
| create_feedB | Create a new product feed for a catalog. |
| upload_feedC | Upload/trigger a feed file upload for a product feed. |
| get_feed_uploadsB | Get upload history for a product feed. |
| list_rulesC | List automated rules for the ad account. |
| get_ruleB | Get details of a specific automated rule. |
| create_ruleB | Create a new automated rule for the ad account. |
| update_ruleC | Update an existing automated rule. |
| delete_ruleB | Delete an automated rule. |
| list_experimentsA | List A/B test experiments (ad studies) for the ad account. |
| create_experimentB | Create a new A/B test experiment (ad study). |
| get_experimentB | Get details of a specific experiment (ad study). |
| update_experimentA | Update an existing experiment (ad study). |
| get_experiment_resultsB | Get results/cells of an experiment (ad study). |
| send_conversion_eventA | Send a server-side conversion event via the Conversions API (pixel). |
| send_offline_eventA | Send offline conversion events through the Conversions API to a dataset. Store events must use action_source=physical_store. |
| list_offline_event_setsC | List offline conversion data sets for the ad account. |
| create_offline_event_setC | Create a new offline conversion data set. |
| list_budget_schedulesB | List budget schedules attached to a campaign or ad set. Returns paginated results. |
| create_budget_scheduleC | Create a budget schedule on a campaign or ad set. |
| update_budget_scheduleC | Update an existing budget schedule. Only provided fields will be modified. |
| delete_budget_scheduleA | Delete a budget schedule. This action is irreversible. |
| list_rf_predictionsB | List reach & frequency predictions for the ad account. Returns paginated results. |
| create_rf_predictionC | Create a new reach & frequency prediction. Provide targeting spec as JSON string, budget in cents, and scheduling info. |
| get_rf_predictionA | Get details of a specific reach & frequency prediction by ID. |
| delete_rf_predictionA | Delete a reach & frequency prediction. This action is irreversible. |
| list_block_listsB | List publisher block lists for the ad account. Returns paginated results. |
| create_block_listC | Create a new publisher block list for the ad account. |
| add_to_block_listA | Add publisher URLs to an existing block list. |
| remove_from_block_listA | Remove publisher URLs from an existing block list. |
| delete_block_listA | Delete a publisher block list. This action is irreversible. |
| get_ad_accountB | Get details of the configured ad account including status, balance, currency, timezone, and spend info. |
| list_ad_accountsA | List all ad accounts accessible by the current user. Returns paginated results. |
| update_ad_accountB | Update the configured ad account settings. Only provided fields will be modified. |
| get_account_activitiesB | Get activity log for the ad account. Shows changes made to campaigns, ad sets, ads, etc. |
| list_account_usersC | List users who have access to the ad account with their roles and permissions. |
| list_businessesA | List all businesses accessible by the current user. Returns paginated results. |
| get_businessB | Get details of a specific business by ID. |
| list_business_ad_accountsA | List ad accounts owned by the configured business. Requires META_BUSINESS_ID env var. |
| list_business_usersA | List users of the configured business. Requires META_BUSINESS_ID env var. |
| add_business_userA | Add a user to the configured business by email. Requires META_BUSINESS_ID env var. |
| remove_business_userA | Remove a user from the configured business. Requires META_BUSINESS_ID env var. |
| list_business_pagesA | List Facebook Pages owned by the configured business. Requires META_BUSINESS_ID env var. |
| list_business_instagram_accountsA | List Instagram accounts owned by the configured business. Requires META_BUSINESS_ID env var. |
| list_system_usersA | List system users of the configured business. Requires META_BUSINESS_ID env var. |
| create_system_userB | Create a new system user in the configured business. Requires META_BUSINESS_ID env var. |
| exchange_tokenA | Exchange a short-lived access token for a long-lived token. Requires META_APP_ID and META_APP_SECRET to be configured. |
| refresh_tokenA | Extend a valid long-lived user access token through Meta's documented token exchange flow. Requires META_APP_ID and META_APP_SECRET. |
| debug_tokenA | Debug an access token to inspect its properties, permissions, expiration, and validity. Requires META_APP_ID and META_APP_SECRET. |
| search_ad_libraryB | Search the Meta Ad Library for ads. Allows searching by keywords, countries, and ad type. Useful for competitive research and transparency. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| campaign_wizard | Step-by-step guide to create a full ad campaign from scratch |
| performance_report | Analyze ad performance with detailed breakdowns and recommendations |
| audience_builder | Build and refine target audiences using Meta's targeting tools |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| account-info | Ad account overview — status, balance, currency, timezone, and total spend |
| campaigns-overview | All active campaigns with budget information |
| spending-today | Today's spending summary — spend, impressions, clicks, and reach |
TDQS
Scored across 134 tools
Many tools have clearly distinct purposes (e.g., create_campaign vs create_adset), but the sheer number (134) creates inevitable overlap among lead-related tools (get_lead, get_campaign_leads, get_adset_leads, get_form_leads), targeting search tools (search_targeting, search_targeting_map), and business/account listing tools. Descriptions help, but similar naming patterns and volume increase misselection risk.
All tool names use consistent snake_case with a verb_noun pattern (list_campaigns, create_campaign, delete_campaign, get_campaign_insights). Even compound names like add_users_to_audience and remove_from_block_list follow a predictable verb_object structure, with no mixing of conventions.
134 tools is far beyond the typical well-scoped range (3–15) and constitutes an extreme mismatch for a single MCP server. Even a comprehensive API surface could be organized into fewer, more focused tools or resources; the large count makes discovery and correct selection difficult.
The server covers an extensive range of Meta Ads operations including campaigns, ad sets, ads, creatives, audiences, catalogs, rules, and business management. However, some lifecycle gaps exist (e.g., no delete for creatives, catalogs, product sets, or saved audiences), though agents can often work around these.