MMetadata /docs
Docs/Tools/generate_flexible_brand_creative

generate_flexible_brand_creative

Generate an EDITABLE, layered brand creative: a clean AI background scene (no baked text) plus AI-placed, editable text/CTA/logo layers.

Writes creative

Creates or changes something in the account. Put it behind whatever review your agent uses.

What it does

Generate an EDITABLE, layered brand creative: a clean AI background scene (no baked text) plus AI-placed, editable text/CTA/logo layers. Returns a structured layout document (JSON), NOT a flat image — the UI renders it in an editor the user can rearrange before saving.

USE FOR:
- The DEFAULT for a standalone creative the user will review, refine, or use — "make me a creative", "design an ad", "give me options", "a creative I can tweak/edit".
- Any request where the user should be able to move/retype the headline, restyle the CTA, swap the logo, add layers, or regenerate the background before finalizing.

DIFFERENT FROM generate_brand_creative: PREFER THIS for standalone creative requests. generate_brand_creative bakes headline + CTA into the pixels and returns one finished PNG; use that flat tool only when building an ad / feeding a campaign inline (the flat image flows straight into an ad, with no human edit-and-save step) or when a finished flat image is explicitly requested.

COPY DISCIPLINE: fewer layers = a cleaner layout the user can actually edit. Default to headline + cta (add subheadline only when it genuinely earns its place); pass body / disclaimer ONLY when the user explicitly asked for that copy.

COPY LIMITS (image copy is shorter than ad text): headline at most 45 characters and 8 words on a 1:1, 4:3, 4:5 or 9:16 canvas (55 characters and 10 words on 16:9 or 1.91:1, 35 characters and 6 words on the 6:5 banner); cta any wording that fits on one line of its button at the format's prominent CTA size, including padding; subheadline at most 90 characters; label (a short tag above the headline) at most 24 characters. Copy over a limit is rejected with the limit named: shorten it and call again rather than splitting it across layers.

CANVAS: the creative is made at the ad channel's own recommended size for its shape: 'platform' is the channel and 'aspect_ratio' one of the shapes it takes (each channel's shapes and sizes are listed under aspect_ratio). A shape the channel does not take is refused before anything is generated, with the channel's shapes named.

REFERENCE IMAGES: when the user gives images for a NEW creative to follow ("use these as references", "in this style"), pass their URLs in reference_images, at most 12 per creative (fewer beside brand characters, and the call says how many): the image model sees them, every background draft follows them in place of the brand's own reference ads, and a draft that ignores them is not returned. Their text and logos are never painted; the copy, CTA and logo stay editable layers.

FINISHED CHECK: the combined background, text, logo and CTA are checked before this tool returns the draft. If the returned document has a warning, repeat it beside the draft card; a failed or unavailable check leaves the draft editable for review.

RETURNS: a layered document — canvas dimensions (the channel's exact size), background image URL, brand colors/logo, and an ordered list of layers (headline, subheadline, body, cta, disclaimer, logo) with normalized positions and styling.

Arguments

ArgumentTypeNotes
domain string required Company domain for brand DNA (e.g. 'metadata.io'). No protocol.
instructions string required Natural-language direction for the background scene and overall creative (e.g. 'clean B2B scene for an AI analytics launch').
platform string The ad channel the creative is for: it sets the canvas sizes and the default shape. 'display' is Google Ads and Microsoft Advertising image assets; 'general' an image for no single channel, or one image shared by several. Default: 'linkedin'.
one of: linkedin, facebook, instagram, reddit, display, general
aspect_ratio string Canvas shape, one of the shapes 'platform' takes; the creative comes out at that channel's own size for it. Each platform's shapes and sizes: linkedin (default 1:1): 1:1 at 1200x1200, 1.91:1 at 1200x628, 4:5 at 720x900; facebook (default 1:1): 1:1 at 1080x1080, 4:5 at 1440x1800, 9:16 at 1080x1920, 1
one of: 1:1, 1.91:1, 4:5, 9:16, 16:9, 4:3, 6:5
headline string Headline copy to place as an editable layer. Image copy, not ad text: at most 45 characters and 8 words on a 1:1, 4:3, 4:5 or 9:16 canvas, 55 characters and 10 words on 16:9 or 1.91:1, 35 characters and 6 words on the 6:5 banner. Longer copy is rejected with the limit named, so it can be shortened a
subheadline string Optional subheadline copy, at most 90 characters; pass it only when it adds a fact the headline lacks.
body string Optional supporting body copy. Pass ONLY when the user explicitly asked for body copy — extra layers crowd the layout.
cta string Optional call-to-action button text (e.g. 'Learn more', 'Try Metadata in ChatGPT'): any number of words that fits on one line of the button at the format's CTA size, including padding. The format-specific character limit is computed from that size. A longer one is rejected with the limit named, so i
disclaimer string Optional fine-print/disclaimer copy. Pass ONLY when the user explicitly asked for a disclaimer.
include_logo boolean Add a brand logo layer (resolved from the brand kit). Default: true.
label string Optional short tag set small above the headline, at most 24 characters: a product name or a category ('Metadata AI', 'Campaign Builder'). Longer is rejected with the limit named.
headline_accent string Optional key phrase of the headline, copied word for word from it, shown in the brand accent color (e.g. 'final say' in 'You keep the final say'). It must be part of the headline, not all of it. When the accent color would not read on the background the phrase is shown in the headline color.
background_tone string Base tone of the background scene, drawn from the brand palette. In a batch, give each creative a different tone so no two share one. Omit it to anchor the scene on the brand's website background.
one of: light, mid, dark
layout string How the copy is set: column (a left- or right-aligned column at the side) or centered (a centered stack across the top or bottom). In a batch, give the creatives different layouts. The copy goes where the scene leaves calm space for that layout, else where it is calmest. Omit it to let the calmest s
one of: column, centered
style string How the user said the creative should look (style, medium, mood, colors, people, composition), copied word for word from them, never paraphrased. Every background draft follows it, and when no draft does, the call fails with an error saying so. Omit it when the user described no look.
characters array Names of brand characters (registered with register_brand_character) the creative must show, as the user named them. Their sheets guide every draft and a draft that loses one is not returned. An unknown name is refused with the closest registered one: confirm it with the user, never pick one for the
reference_images array URLs of the images (PNG, JPG, WebP, GIF, BMP or TIFF) the user gave as references for this creative, at most 12: images they attached and asked a new creative to follow. A creative with brand characters takes fewer, and the call says how many. The background follows their style, medium, mood and com

Request

Request template, not a complete runnable example. Replace placeholders, empty objects, arrays, and zero values with valid account-specific inputs. Read required fields and nested constraints in the full schema. Confirm the account, connected channels, and referenced assets before calling a write tool.

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":"generate_flexible_brand_creative","arguments":{"domain":"<domain>","instructions":"<instructions>"}}}'

Response

No recorded response. This tool writes to the account, so it is never executed to build these docs. The request is an illustrative template. Fill required fields and check the current schema before calling it. No response is fabricated.

Other creative tools:

Browse the tool catalog · machine-readable index