update_meta_placements
Set the channel-level Meta placement default of an existing DRAFT wizard campaign's Facebook or Instagram channel: automatic placements (Meta decides where ads serve) or a manua…
Destructive creative
Deletes, archives, launches or moves budget. Do not give an agent this one without a human gate.
What it does
Set the channel-level Meta placement default of an existing DRAFT wizard campaign's Facebook or Instagram channel: automatic placements (Meta decides where ads serve) or a manual list of surfaces (Feed, Stories, Reels, ...).
Placements are where the ads serve inside Meta's networks. This is the same
"Placements" control the platform UI shows in the Facebook/Instagram section of
the campaign draft page. The campaign MUST already have the channel enabled
(via create_campaign / add_and_edit_campaign_elements).
⚠️ DRAFT-ONLY: the platform rejects the edit once the campaign is Launching/Launched.
KEYWORDS: meta, facebook, instagram, threads, placements, placement, feed, stories,
reels, explore, search results, profile feed, automatic placements, manual placements,
advantage+ placements, where ads serve, surfaces, channel settings, campaign settings
WHEN TO USE:
- Serve ads only on specific surfaces (e.g. Instagram Reels and Stories)
- Switch a channel back to automatic placements (Meta optimizes delivery)
- The user asks where their Facebook/Instagram ads will appear
PARAMETERS:
- campaign_id: the wizard campaign ID (required)
- channel: FACEBOOK | INSTAGRAM (required — the campaign channel to edit)
- mode: AUTO | MANUAL (required). AUTO = automatic placements, clears any
manual set. MANUAL = serve only on the placements listed.
- placements: array of placement codes, required when mode=MANUAL, ignored
for AUTO. Facebook surfaces: FB_FEED, FB_STORIES, FB_REELS,
FB_SEARCH_RESULTS. Instagram surfaces: IG_FEED, IG_PROFILE_FEED,
IG_EXPLORE, IG_EXPLORE_HOME, IG_STORIES, IG_REELS, IG_SEARCH_RESULTS.
Threads: TH_THREADS_STREAM.
PLACEMENT RULES (enforced; violations return a descriptive error):
- Companion rules: FB_STORIES and FB_SEARCH_RESULTS require FB_FEED;
IG_PROFILE_FEED, IG_SEARCH_RESULTS and IG_EXPLORE require IG_FEED;
IG_EXPLORE_HOME requires IG_EXPLORE; TH_THREADS_STREAM requires IG_FEED.
- An INSTAGRAM channel accepts IG_* placements only.
- A FACEBOOK channel always accepts FB_* placements. IG_* / TH_* placements
on a FACEBOOK channel additionally need the account's unified-placement
rollout (feature flag CORE_META_IG_PLACEMENT_ON_FB) — the platform rejects
them on accounts without it.
- IG_PROFILE_FEED is not available on Lead Gen (CPL) campaigns.
- AUTO is rejected while the channel has ad groups (per-ad-group setups keep
manual placements).
This tool sets the campaign-wide default for the channel. Per-ad-group
placement overrides exist in the platform UI but are not editable through
chat yet — send users to the campaign page for per-ad-group customization.
EXAMPLES:
Instagram channel, Reels + Stories + Feed only:
update_meta_placements({"campaign_id": 12345, "channel": "INSTAGRAM",
"mode": "MANUAL", "placements": ["IG_FEED", "IG_STORIES", "IG_REELS"]})
Facebook channel back to automatic placements:
update_meta_placements({"campaign_id": 12345, "channel": "FACEBOOK", "mode": "AUTO"})
RESPONSE: {success, campaign_id, channel_id, channel, campaign_status,
applied:{mode, placements}, previous?, errors?}
`previous` echoes the channel's placement state before the edit.
INTEGRATION WITH OTHER TOOLS:
- Use search_campaigns_by_names / get_campaign_by_wizard_id to find the campaign
- The channel is enabled by create_campaign or add_and_edit_campaign_elements
- Reddit placements (feed/conversations) are a different system: use
update_reddit_channel_settings for thoseArguments
| Argument | Type | Notes | |
|---|---|---|---|
campaign_id |
integer | required | The unique identifier of the wizard campaign |
channel |
string | required | Which campaign channel to edit. Meta placements only exist on Facebook and Instagram channels. one of: FACEBOOK, INSTAGRAM |
mode |
string | required | AUTO = automatic placements (Meta decides, clears the manual set). MANUAL = serve only on the placements listed in `placements`. one of: AUTO, MANUAL |
placements |
array | Placement codes to serve on. Required when mode=MANUAL (at least one); ignored for AUTO. Companion rules apply — see the tool description. |
Request
curl
curl -s -X POST https://mcp-server.metadata.io/mcp \
-H "Authorization: $METADATA_PAT" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"update_meta_placements","arguments":{"campaign_id":0,"channel":"FACEBOOK","mode":"AUTO"}}}'
Response
No recorded response. This tool can delete, archive, launch or move budget, so it is never executed to build these docs.
The request above is still the exact shape to send. Nothing on this page is invented.
Related
Other creative tools: