scaleforge-mcp-meta-ads
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| META_ACCESS_TOKEN | Yes | Meta access token with ads_management, ads_read, business_management, pages_read_engagement, pages_manage_ads scopes |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_ad_accountsA | List Meta Ad Accounts accessible to the current access token. Returns id (act_XXX), name, account_status, currency, business_name, spend_cap, timezone_name. Use this first to discover what you can work with. |
| get_ad_accountA | Get detailed info for a single Ad Account: status, spend cap, balance, funding source, business, timezone, disable_reason. Returns the full configuration record — use this for deep inspection of one account. |
| get_ads_volumeA | PRE-FLIGHT CHECK: Get per-Page ads-running-or-in-review counts and limits for an ad account. Meta caps active ads per Page (default 250) and this limit is SHARED across every account using the same Page. Always call this before a bulk activation to avoid silent review failures. Returns one row per Page actor. |
| list_campaignsA | List campaigns in an ad account. Returns id, name, status, objective, daily_budget, lifetime_budget, bid_strategy, created_time. Paginated via |
| get_campaignA | Get a single campaign by ID. Returns all default fields plus anything in |
| create_campaignA | WRITE: Create a new campaign. Default status is PAUSED (recommended — set ACTIVE only after creating ad sets and ads). For CBO, pass daily_budget or lifetime_budget at this level; for ABO leave budget off and set it on the ad set. |
| update_campaignC | WRITE: Update any mutable field on a campaign (name, status, daily_budget, lifetime_budget, bid_strategy). Pass only the fields you want to change. |
| delete_campaignA | WRITE: Hard-delete a campaign (and its ad sets / ads). Prefer update_campaign with status=ARCHIVED if you want to keep historical data. |
| list_adsetsA | List ad sets. Pass either |
| get_adsetA | Get a single ad set by ID. Returns default fields plus anything in |
| create_adsetA | WRITE: Create an ad set under a campaign. Default status is PAUSED. |
| update_adsetA | WRITE: Update any mutable field on an ad set (status, bid_amount, daily_budget, targeting, name, etc.). Pass only the fields you want to change. |
| delete_adsetA | WRITE: Hard-delete an ad set (and its ads). Prefer update_adset status=ARCHIVED to keep history. |
| list_adsB | List ads. Pass either |
| get_adA | Get a single ad by ID. Returns full creative + issues + preview link. |
| update_adA | WRITE: Update an ad's name, status, or swap its creative. To replace the creative pass |
| delete_adA | WRITE: Hard-delete an ad. Prefer update_ad status=ARCHIVED to keep history. |
| list_creativesB | List ad creatives in an account. Returns id, name, object_story_spec, asset_feed_spec, thumbnail_url, video_id, image_hash, body/title. |
| get_creativeB | Get a single ad creative by ID. |
| create_ad_creativeA | WRITE: Create a single-text ad creative from an Note: image hashes are per-ad-account in Meta — a hash uploaded on account A is NOT valid on account B. Re-upload to each target account. |
| create_ad_creative_with_asset_feedA | WRITE: Create a DYNAMIC (multi-text) creative using |
| upload_videoA | WRITE: Upload a video to an ad account. Returns {id, title}. Prefer |
| upload_imageA | WRITE: Upload an image to an ad account. Returns {images: {filename: {hash}}}. The IMPORTANT: Meta image hashes are SCOPED TO THE AD ACCOUNT — a hash uploaded on account A cannot be used on account B. If you need the same image across multiple accounts, call this once per account. (ScaleForge's backend caches hashes per account to avoid re-uploads within the same account.) |
| get_campaign_insightsA | Pull performance metrics for ONE campaign. Default fields: spend, impressions, clicks, cpc, cpm, ctr, reach, frequency, actions, conversions, purchase_roas. Default range: last_7d. Use |
| get_adset_insightsB | Pull performance metrics for ONE ad set. Same fields/breakdowns as get_campaign_insights. |
| get_ad_insightsA | Pull performance metrics for ONE ad. Same fields/breakdowns as get_campaign_insights. Use this to compare creative performance at the individual-ad level. |
| pause_campaigns_batchA | WRITE (BULK): Pause many campaigns in a single Meta Batch API call (up to 50/request; arrays bigger than 50 are chunked automatically with a 2s delay between chunks to sidestep rate-limit code 17). Returns {results: Array<{code, body}>} — one entry per campaign. |
| activate_campaigns_batchA | WRITE (BULK): Activate many campaigns in one Batch API call. BEFORE activation we run a per-Page ads_volume pre-flight for every distinct ad account — warnings are returned in the response so the agent / user can abort if a Page is over capacity. Agents MUST confirm with the user before calling this (activation starts spend immediately). |
| update_bids_batchA | WRITE (BULK): Update |
| list_pagesA | List Facebook Pages the current user/System User manages. Each row has id, name, access_token (Page Access Token — needed for PBIA provisioning), category, tasks (what this token can do on the Page, e.g. 'MANAGE', 'CREATE_CONTENT', 'ADVERTISE'). |
| get_pbiaA | Get (or auto-create) a Page-Backed Instagram Account for a Facebook Page. Use this when the Page has no linked Instagram account but you want to run ads with IG placements — Meta lets a Page act as its own IG presence via PBIA (same option as 'Use Facebook Page for Instagram' in Ads Manager). Flow: GET the Page's access_token, list existing PBIAs, create one if none exists. Returns {page_backed_instagram_account_id, created (bool)}. |
| search_ads_libraryA | Search Meta's public Ad Library for competitive research. Returns active and inactive ads matching Note: only ads in categories subject to public transparency (political / housing / employment / credit) return full metadata; other categories return lighter data. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Mike25app/scaleforge-mcp-meta-ads'
If you have feedback or need assistance with the MCP directory API, please join our Discord server