meta_create_creative
Build a Meta ad creative from an asset that you uploaded to AdCrunch. Image and video both work.
Ask for a creative from an asset that you uploaded to AdCrunch, with its text, its link and its button. The agent builds the creative on Meta, and meta_create_ad then puts it in an ad set.
Make a creative from the spring trail image, from the Northwind Outdoor Page, with a Shop now button to example.com/spring.
The agent calls meta_create_creative, then get_mutation_status, and you see the id of the new creative. Change what runs on Meta walks the whole campaign.
Reference
Build a Meta ad creative from media you have uploaded to AdCrunch and registered to this advertiser. Pass the AdCrunch asset ID (ast_<id>) that asset_register used — not a Meta image hash or video ID. Image and video both work, and you do not choose between them: the asset’s kind decides the format. A video uploaded moments ago is fine; the creative waits for Meta to finish processing it. Runs asynchronously: returns a workflowId — call get_mutation_status with it to get the new creative’s id, then pass that to meta_create_ad.
Input
| Argument | Type | Required | Description |
|---|---|---|---|
advertiserId |
string | yes | Advertiser account ID (acc_<id>). Must belong to the active organization. |
assetId |
string | yes | The AdCrunch asset (ast_<id>) to build from. It must already be registered to this advertiser — call asset_register first if it is not. |
callToAction |
one of LEARN_MORE, SHOP_NOW, SIGN_UP, BOOK_TRAVEL, DOWNLOAD, GET_OFFER, GET_QUOTE, CONTACT_US, SUBSCRIBE, APPLY_NOW, NO_BUTTON |
yes | The button on the ad, e.g. SHOP_NOW. Use NO_BUTTON for none. |
description |
string | no | Supporting line under the headline. Not always shown, depending on placement. |
headline |
string, at least 1 character | yes | The bold headline, usually beside the button. |
link |
string (uri) | yes | The destination URL the ad sends people to. |
message |
string, at least 1 character | yes | The primary text — the body copy above the media. |
name |
string, at least 1 character | yes | Creative name, as it appears in Ads Manager. Internal only; users never see it. |
pageId |
string | yes | The Facebook Page the ad speaks from. Find one with meta_list_pages. |
Output
A successful call returns this object in structuredContent.
| Field | Type | Always present | Description |
|---|---|---|---|
workflowId |
string | yes | The id of the change. The change has not reached Meta yet. Give this id to get_mutation_status to find out how the change ended. |
Failure codes
A failed call has isError set, and structuredContent.error holds one of these codes. Errors describes the shape of a failed call.
not_foundmissing_write_accessforbiddeninvalid_requestinternal_error
Scope
The token must hold mutation:write. Auth & scopes lists each scope.
Annotations
A client reads these hints. A hint that the tool does not declare has the default value of the MCP specification.
- Writes. The tool can change data.
- Destructive. The tool can make a change that you cannot undo. A client can ask you to confirm before it calls the tool.
- Not idempotent. A second call with the same arguments can change more.
- Open world. The tool reaches a system outside AdCrunch, such as an ad platform.
Example
The arguments:
{
"advertiserId": "acc_1485443900032333",
"assetId": "ast_k7m2x9q4w1e8r5t3y6u0i2o4",
"callToAction": "SHOP_NOW",
"headline": "Trail shoes for spring",
"link": "https://www.example.com/spring",
"message": "Light, grippy, and ready for wet trails.",
"name": "Spring trail shoes, image 1",
"pageId": "104857392018274"
}
The result, in structuredContent:
{
"workflowId": "3f9c2b7e-8a41-4d6e-9b05-c1e7a2d4f860"
}