update_campaign
Modify existing Meta ad campaign settings including budget, status, objectives, and bid strategies to optimize performance and adjust targeting parameters.
Instructions
Update campaign settings for an existing campaign.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| meta_access_token | No | ||
| name | No | ||
| status | No | ||
| special_ad_categories | No | ||
| daily_budget | No | ||
| lifetime_budget | No | ||
| bid_strategy | No | ||
| bid_cap | No | ||
| spend_cap | No | ||
| campaign_budget_optimization | No | ||
| objective | No | ||
| use_ad_set_level_budgets | No |
Implementation Reference
- The implementation of the `update_campaign` tool, decorated with `@mcp_server.tool()` and `@meta_api_tool`.
async def update_campaign( campaign_id: str, meta_access_token: Optional[str] = None, name: Optional[str] = None, status: Optional[str] = None, special_ad_categories: Optional[List[str]] = None, daily_budget: Optional[int] = None, lifetime_budget: Optional[int] = None, bid_strategy: Optional[str] = None, bid_cap: Optional[int] = None, spend_cap: Optional[int] = None, campaign_budget_optimization: Optional[bool] = None, objective: Optional[str] = None, use_ad_set_level_budgets: Optional[bool] = None, ) -> str: """Update campaign settings for an existing campaign.""" if not campaign_id: return _json({"error": "No campaign ID provided"}) bid_error = _validate_bid_strategy(bid_strategy) if bid_error: return _json(bid_error) payload: Dict[str, Any] = {} if name is not None: payload["name"] = name if status is not None: payload["status"] = status if special_ad_categories is not None: categories, category_error = _normalize_special_ad_categories(special_ad_categories) if category_error: return _json({"error": category_error}) payload["special_ad_categories"] = json.dumps(categories) if use_ad_set_level_budgets is True: payload["daily_budget"] = "" payload["lifetime_budget"] = "" if campaign_budget_optimization is not None: payload["campaign_budget_optimization"] = "false" else: if daily_budget is not None: payload["daily_budget"] = "" if daily_budget == "" else str(daily_budget) if lifetime_budget is not None: payload["lifetime_budget"] = "" if lifetime_budget == "" else str(lifetime_budget) if campaign_budget_optimization is not None: payload["campaign_budget_optimization"] = "true" if campaign_budget_optimization else "false" if bid_strategy is not None: payload["bid_strategy"] = str(bid_strategy).strip().upper() if bid_cap is not None: payload["bid_cap"] = str(bid_cap) if spend_cap is not None: payload["spend_cap"] = str(spend_cap) if objective is not None: payload["objective"] = objective if not payload: return _json({"error": "No update parameters provided"}) result = await make_api_request(campaign_id, meta_access_token, payload, method="POST") if isinstance(result, dict) and use_ad_set_level_budgets is True: result["budget_strategy"] = "ad_set_level" result["note"] = "Campaign updated to use ad set level budgets." return _json(result)