meta-ads-manager-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| META_PAGE_ID | Yes | Facebook Page ID | |
| META_ACCESS_TOKEN | Yes | Long-lived Meta Graph API token with ads_management permission | |
| META_AD_ACCOUNT_ID | Yes | Meta Ad Account ID (numbers only, no act_ prefix) | |
| META_ADS_AUDIT_LOG_PATH | No | Optional JSONL audit log path (default: ~/.meta-ads-mcp/audit.jsonl) | |
| META_ADS_MAX_DAILY_BUDGET_CENTS | No | Optional daily budget guardrail in cents (e.g., '5000' for $50) |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_meta_campaignA | Create a complete Meta ad campaign: campaign, ad set, creatives, and ads. Each item in
daily_budget_cents: budget in cents. 1000 = $10/day, 3000 = $30/day. dry_run: when True (default), simulates all API calls without spending money. Set dry_run=False to actually deploy. All campaigns start as PAUSED regardless. confirm: required when dry_run=False. This is the approval gate. Valid objectives: OUTCOME_TRAFFIC, OUTCOME_AWARENESS, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_SALES, OUTCOME_APP_PROMOTION Valid CTAs: LEARN_MORE, SIGN_UP, DOWNLOAD, SHOP_NOW, BOOK_NOW, GET_OFFER, SUBSCRIBE, CONTACT_US, APPLY_NOW, WATCH_MORE, INSTALL_MOBILE_APP |
| get_ad_account_summaryA | Get the configured Meta ad account summary. Read-only. Use this before campaign work to confirm the connected account, currency, timezone, spend, balance, and account status. |
| list_campaignsA | List recent campaigns in the configured Meta ad account. Read-only. Use this to find campaign IDs before status, insights, budget, pause, activate, or bulk operations. |
| list_ad_setsA | List recent ad sets in the configured Meta ad account. Read-only. Use this to find ad set IDs before budget or status changes. |
| list_adsA | List recent ads in the configured Meta ad account. Read-only. Use this to find ad IDs and inspect delivery status. |
| get_meta_insightsB | Get Meta Ads performance insights. Read-only. object_id can be an ad account, campaign, ad set, or ad ID. Leave object_id blank to use the configured ad account. Use level for account breakdowns such as campaign, adset, or ad. |
| upload_ad_imageA | Upload an image to the configured Meta ad account. dry_run defaults to True. Set dry_run=False and confirm=True to upload. Returns an image hash that can be used in ad creatives. |
| update_daily_budgetA | Update daily budget for a campaign or ad set. dry_run defaults to True. Set dry_run=False and confirm=True after review. If META_ADS_MAX_DAILY_BUDGET_CENTS is set, the budget cannot exceed it. |
| bulk_update_campaign_statusA | Bulk pause, activate, or delete campaigns. status must be PAUSED, ACTIVE, or DELETED. dry_run defaults to True. Set dry_run=False and confirm=True after reviewing the campaign IDs. |
| get_campaign_statusB | Get the status of a Meta campaign including its ad sets and ads. Returns campaign name, status, objective, and lists of ad sets and ads with their statuses and budgets. |
| pause_campaignB | Pause a live Meta campaign. Safe to call on already-paused campaigns. |
| activate_campaignA | Activate (unpause) a Meta campaign. This will resume ad spending. The campaign must have a valid payment method and approved creatives. Set confirm=True after reviewing the campaign in Ads Manager. |
| delete_campaignA | Permanently delete a Meta campaign. This cannot be undone. Set confirm=True after reviewing the campaign ID. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 13 tools
Most tools target distinct resources or actions, and descriptions clarify intent. There is some overlap between single-campaign pause/activate/delete and bulk_update_campaign_status, and get_campaign_status overlaps with list_campaigns/list_ad_sets/list_ads.
All tools use snake_case with a predictable verb-first pattern such as list_campaigns, get_meta_insights, update_daily_budget, and delete_campaign. Minor additions like "meta" or "bulk" do not break consistency.
The server has 13 tools, which is well within a reasonable range for an ad campaign management surface. Each tool has a plausible place in the workflow, from account summary and listing to creation, budget updates, and status controls.
Campaign-level CRUD is mostly covered: create, list, inspect status, update budget, pause/activate, delete, and bulk status updates. However, ad sets, ads, and creatives are not independently manageable after creation, and there are no update operations for targeting, creative content, bidding, or ad/ad set lifecycle beyond budget and campaign status.