Skip to main content
Glama

Metadata MCP Connector

Generate Flexible Brand Creative

generate_flexible_brand_creative

Generate a layered creative document with an AI-generated background and editable text, CTA, and logo layers, at the ad channel's recommended size for the chosen platform and aspect_ratio (a shape the channel does not take is refused). Returns JSON containing canvas dimensions, positions, styling, and a hosted background image URL. The background URL is a standalone asset that the caller can download or use independently; it is also referenced by the returned document. Optional reference_images (at most 12) guide the background without painting their text or logos. The combined result is checked before return, and any warning is included in the document. No ad is automatically created or launched. Copy above the schema and canvas-specific limits is rejected with an error: headline 45 characters and 8 words on 1:1, 4:3, 4:5 and 9:16 canvases, 55 characters and 10 words on 16:9 and 1.91:1, or 35 characters and 6 words on the 6:5 banner; CTA wording that fits on one line of its button; subheadline 90 characters; label 24 characters.

Input Schema

NameRequiredDescriptionDefault
ctaNoOptional 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 it can be shortened and resent.
bodyNoOptional supporting body copy. Pass ONLY when the user explicitly asked for body copy — extra layers crowd the layout.
labelNoOptional 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.
styleNoHow 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.
domainYesCompany domain for brand DNA (e.g. 'metadata.io'). No protocol.
layoutNoHow 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 space decide.
headlineNoHeadline 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 and resent.
platformNoThe 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'.linkedin
charactersNoNames 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 them. Omit when the user named no character.
disclaimerNoOptional fine-print/disclaimer copy. Pass ONLY when the user explicitly asked for a disclaimer.
subheadlineNoOptional subheadline copy, at most 90 characters; pass it only when it adds a fact the headline lacks.
aspect_ratioNoCanvas 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.91:1 at 1200x628; instagram (default 1:1): 1:1 at 1080x1080, 4:5 at 1440x1800, 9:16 at 1080x1920, 1.91:1 at 1200x628; reddit (default 4:3): 4:3 at 1440x1080, 1:1 at 1080x1080, 4:5 at 1080x1350, 16:9 at 1920x1080; display (default 1.91:1): 1.91:1 at 1200x628, 1:1 at 1200x1200, 4:5 at 960x1200, 9:16 at 1080x1920; general (default 1:1): 1:1 at 1200x1200, 1.91:1 at 1200x628, 4:5 at 1440x1800, 9:16 at 1080x1920, 16:9 at 1920x1080, 4:3 at 1440x1080, 6:5 at 300x250. A shape the platform does not list is refused before anything is generated. Pass this whenever the user names a size or shape: '1:1' square, '1.91:1' landscape (LinkedIn, Meta, Google and Microsoft), '16:9' wide, '4:3' Reddit's landscape, '4:5' portrait, '9:16' full-height story, '6:5' the 300x250 banner of LinkedIn Message and Conversation ads ('general' only). Omit to take the platform's default shape.
include_logoNoAdd a brand logo layer (resolved from the brand kit). Default: true.
instructionsYesNatural-language direction for the background scene and overall creative (e.g. 'clean B2B scene for an AI analytics launch').
background_toneNoBase 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.
headline_accentNoOptional 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.
reference_imagesNoURLs 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 composition in place of the brand's own reference ads, and their subject when the instructions ask for it; their text and logos are never painted. An animated GIF or WebP is read from frames across its animation. A URL that cannot be read fails the call, naming it, before anything is generated. Omit when the user gave no reference image.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / reference_images
      Added value: +{
      +  "description": "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 composition in place of the brand's own reference ads, and their subject when the instructions ask for it; their text and logos are never painted. An animated GIF or WebP is read from frames across its animation. A URL that cannot be read fails the call, naming it, before anything is generated. Omit when the user gave no reference image.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 12,
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / characters
      Added value: +{
      +  "description": "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 them. Omit when the user named no character.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 5,
      +  "type": "array"
      +}
  3. Changed2 schema fields changed
    • addedInput schema / properties / layout
      Added value: +{
      +  "description": "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 space decide.",
      +  "enum": [
      +    "column",
      +    "centered"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / style
      Added value: +{
      +  "description": "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.",
      +  "maxLength": 500,
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / cta / description
      Previous value: -"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, about 25 characters on 9:16, 29 on the 6:5 banner, 38 on 4:5, 42 on 1:1, 57 on 4:3, 82 on 16:9 and 89 on 1.91:1. A longer one is rejected with the limit named, so it can be shortened and resent."New value: +"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 it can be shortened and resent."
  5. Changed1 schema field changed
    • addedInput schema / properties / background_tone
      Added value: +{
      +  "description": "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.",
      +  "enum": [
      +    "light",
      +    "mid",
      +    "dark"
      +  ],
      +  "type": "string"
      +}
  6. Changed7 schema fields changed
    • changedInput schema / properties / aspect_ratio / description
      Previous value: -"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.91:1 at 1200x628; instagram (default 1:1): 1:1 at 1080x1080, 4:5 at 1440x1800, 9:16 at 1080x1920, 1.91:1 at 1200x628; reddit (default 4:3): 4:3 at 1440x1080, 1:1 at 1080x1080, 4:5 at 1080x1350, 16:9 at 1920x1080; display (default 1.91:1): 1.91:1 at 1200x628, 1:1 at 1200x1200, 4:5 at 960x1200, 9:16 at 1080x1920; general (default 1:1): 1:1 at 1200x1200, 1.91:1 at 1200x628, 4:5 at 1440x1800, 9:16 at 1080x1920, 16:9 at 1920x1080, 4:3 at 1440x1080. A shape the platform does not list is refused before anything is generated. Pass this whenever the user names a size or shape: '1:1' square, '1.91:1' landscape (LinkedIn, Meta, Google and Microsoft), '16:9' wide, '4:3' Reddit's landscape, '4:5' portrait, '9:16' full-height story. Omit to take the platform's default shape."New value: +"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.91:1 at 1200x628; instagram (default 1:1): 1:1 at 1080x1080, 4:5 at 1440x1800, 9:16 at 1080x1920, 1.91:1 at 1200x628; reddit (default 4:3): 4:3 at 1440x1080, 1:1 at 1080x1080, 4:5 at 1080x1350, 16:9 at 1920x1080; display (default 1.91:1): 1.91:1 at 1200x628, 1:1 at 1200x1200, 4:5 at 960x1200, 9:16 at 1080x1920; general (default 1:1): 1:1 at 1200x1200, 1.91:1 at 1200x628, 4:5 at 1440x1800, 9:16 at 1080x1920, 16:9 at 1920x1080, 4:3 at 1440x1080, 6:5 at 300x250. A shape the platform does not list is refused before anything is generated. Pass this whenever the user names a size or shape: '1:1' square, '1.91:1' landscape (LinkedIn, Meta, Google and Microsoft), '16:9' wide, '4:3' Reddit's landscape, '4:5' portrait, '9:16' full-height story, '6:5' the 300x250 banner of LinkedIn Message and Conversation ads ('general' only). Omit to take the platform's default shape."
    • changedInput schema / properties / aspect_ratio / enum
      Previous value: -[
      -  "1:1",
      -  "1.91:1",
      -  "4:5",
      -  "9:16",
      -  "16:9",
      -  "4:3"
      -]New value: +[
      +  "1:1",
      +  "1.91:1",
      +  "4:5",
      +  "9:16",
      +  "16:9",
      +  "4:3",
      +  "6:5"
      +]
    • changedInput schema / properties / cta / description
      Previous value: -"Optional call-to-action button text (e.g. 'Learn more'): at most 3 words and 18 characters so the button stays on one line."New value: +"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, about 25 characters on 9:16, 29 on the 6:5 banner, 38 on 4:5, 42 on 1:1, 57 on 4:3, 82 on 16:9 and 89 on 1.91:1. A longer one is rejected with the limit named, so it can be shortened and resent."
    • removedInput schema / properties / cta / maxLength
      Removed value: -18
    • changedInput schema / properties / headline / description
      Previous value: -"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. Longer copy is rejected with the limit named, so it can be shortened and resent."New value: +"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 and resent."
    • addedInput schema / properties / headline_accent
      Added value: +{
      +  "description": "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.",
      +  "type": "string"
      +}
    • addedInput schema / properties / label
      Added value: +{
      +  "description": "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.",
      +  "type": "string"
      +}
  7. Changed4 schema fields changed
    • changedInput schema / properties / aspect_ratio / description
      Previous value: -"Canvas shape, overriding the one 'platform' implies. Pass this whenever the user names a size or shape: '1:1' for square (e.g. 1080x1080), '16:9' for wide/landscape, '9:16' for a full-height story, '4:5' for portrait. Omit to keep the platform's default shape."New value: +"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.91:1 at 1200x628; instagram (default 1:1): 1:1 at 1080x1080, 4:5 at 1440x1800, 9:16 at 1080x1920, 1.91:1 at 1200x628; reddit (default 4:3): 4:3 at 1440x1080, 1:1 at 1080x1080, 4:5 at 1080x1350, 16:9 at 1920x1080; display (default 1.91:1): 1.91:1 at 1200x628, 1:1 at 1200x1200, 4:5 at 960x1200, 9:16 at 1080x1920; general (default 1:1): 1:1 at 1200x1200, 1.91:1 at 1200x628, 4:5 at 1440x1800, 9:16 at 1080x1920, 16:9 at 1920x1080, 4:3 at 1440x1080. A shape the platform does not list is refused before anything is generated. Pass this whenever the user names a size or shape: '1:1' square, '1.91:1' landscape (LinkedIn, Meta, Google and Microsoft), '16:9' wide, '4:3' Reddit's landscape, '4:5' portrait, '9:16' full-height story. Omit to take the platform's default shape."
    • changedInput schema / properties / aspect_ratio / enum
      Previous value: -[
      -  "1:1",
      -  "16:9",
      -  "9:16",
      -  "4:5"
      -]New value: +[
      +  "1:1",
      +  "1.91:1",
      +  "4:5",
      +  "9:16",
      +  "16:9",
      +  "4:3"
      +]
    • changedInput schema / properties / headline / description
      Previous value: -"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:5 or 9:16 canvas, 55 characters and 10 words on 16:9. Longer copy is rejected with the limit named, so it can be shortened and resent."New value: +"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. Longer copy is rejected with the limit named, so it can be shortened and resent."
    • changedInput schema / properties / platform / description
      Previous value: -"Target platform (sets the default aspect ratio). Default: 'linkedin'."New value: +"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'."
  8. Changed6 schema fields changed
    • changedInput schema / properties / cta / description
      Previous value: -"Optional call-to-action button text (e.g. 'Learn more')."New value: +"Optional call-to-action button text (e.g. 'Learn more'): at most 3 words and 18 characters so the button stays on one line."
    • addedInput schema / properties / cta / maxLength
      Added value: +18
    • changedInput schema / properties / headline / description
      Previous value: -"Headline copy to place as an editable layer."New value: +"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:5 or 9:16 canvas, 55 characters and 10 words on 16:9. Longer copy is rejected with the limit named, so it can be shortened and resent."
    • addedInput schema / properties / headline / maxLength
      Added value: +55
    • changedInput schema / properties / subheadline / description
      Previous value: -"Optional subheadline copy."New value: +"Optional subheadline copy, at most 90 characters; pass it only when it adds a fact the headline lacks."
    • addedInput schema / properties / subheadline / maxLength
      Added value: +90
  9. First observed

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations establish only that this is a non-readonly, non-destructive, open-world operation. The description adds real behavioral detail beyond that: the exact return payload (dimensions, positions, styling, hosted background URL), the fact that the background URL is a standalone downloadable asset, that pre-return validation warnings are embedded in the document, and that text above per-canvas limits is refused with the limit named.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and return shape are front-loaded, which is good. However, the rest of the description is a dense run-on of long clauses, and the final copy-limit sentence is a compression of data already in the schema, so that content does not earn its place as repeated description text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 17 parameters and no output schema, the description carries the burden of explaining results, and it does: it documents the returned JSON, the standalone background URL, the validation warnings, and the refusal behavior. It omits prerequisites that would matter for a brand tool, such as needing a brand kit or domain resolution or credit costs, but overall it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 17 parameters thoroughly; that sets the baseline at 3. The description mostly restates constraints already present in the schema, such as the headline limits of 45/55/35 characters, the 12-image cap, and the aspect-ratio refusal. It rarely adds meaning beyond what the parameter descriptions already say.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it generates a layered creative document with an AI background plus editable text, CTA, and logo layers at the channel's canvas size, and it returns JSON. It is detailed about the output, but it never distinguishes itself from the sibling tools generate_brand_creative, edit_brand_creative, or fix_flexible_creative, which look like close alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It does state some when-not guidance: 'No ad is automatically created or launched' and 'a shape the channel does not take is refused.' It also takes usage cues from its parameter descriptions ('Pass ONLY when the user explicitly asked'). However, it never says when an agent should pick this tool over the similarly named sibling generators or editors, so the agent must infer that choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources