Skip to main content
Glama

Metadata MCP Connector

Create or Update Image Ad

create_update_image_ad
Destructive

Create OR update an IMAGE (or GIF) ad on Facebook, Instagram, LinkedIn, and/or Reddit. TO UPDATE: include id; to CREATE: omit it.

                            CREATIVE WORKFLOW:
                              1. Upload the image/GIF via `upload_image_creative` → response gives `id` (the imageLibraryId).
                              2. Pass that integer as `creativeID` here.
                              - Need a new image? `generate_brand_creative` → `upload_image_creative` → `create_update_image_ad`.

                            ALSO KNOWN AS: create image ad, update image ad, edit image ad,
                            modify image ad, image creative, post image, image post, photo ad.

                            KEYWORDS: image, gif, create, update, edit, modify, ad, ads, image ad, image ads,
                            image creative, photo, picture, banner, image campaign, image upload,
                            LinkedIn image, Facebook image, Instagram image, Reddit image, IG post.

                            CLIENT-SIDE VALIDATION (refuses what the platform UI would also reject):
                              - adName: required, max 50 chars, pattern `[a-zA-Z0-9 _.?,:'/+\-=&;%$#\[\]|()]`.
                              - creativeID: required integer (imageLibraryId from `upload_image_creative`).
                              - Landing-page URL is per channel (`facebookDisplayURL`,
                                `instagramDisplayURL`, `linkedinDisplayURL`, `redditDisplayURL`).
                                Required for FB/IG/LinkedIn, optional for Reddit. Per-channel
                                caps: LinkedIn max 2000, Reddit max 100, FB/IG no length rule.
                                URL format accepts both `metadata.io` and `https://metadata.io`
                                for IMAGE ads. If only one channel's URL is set the server fans
                                it across the other targeted channels; each channel's cap is
                                then enforced per channel.
                              - LinkedIn: linkedinText (required, max 3000), linkedinHeadline (required,
                                max 200), linkedinDescription (optional, max 300 — IMAGE only),
                                linkedinCTA (required, must be a valid LinkedIn CTA enum).
                              - Facebook: metaCTA (required), facebookText (required, no length rule on
                                Facebook), facebookHeadline (required, max 250), facebookDescription
                                (optional, max 300).
                              - Instagram: metaCTA (required), instagramText (required, max 125),
                                instagramHeadline (required, max 40), instagramDescription (optional, max 30).
                              - FB+IG ad with one body text: set just one of facebookText / instagramText
                                and the server copies it across (capped at the receiving channel's limit).
                                Set both explicitly only when you want per-channel copy.
                              - Reddit: redditHeadline (required, max 300), redditCTA (required, must be a
                                valid Reddit CTA enum). redditThumbnailLibraryId is optional and defaults to
                                creativeID.

                            COMMON CTA VALUES:
                              - LinkedIn: LEARN_MORE, REGISTER, APPLY_NOW, DOWNLOAD, JOIN, SIGN_UP,
                                GET_QUOTE, ATTEND, REQUEST_DEMO, SUBSCRIBE. (UNLOCK_FULL_DOCUMENT is
                                DOCUMENT-only — use create_update_document_ad, not this tool.)
                              - Facebook/Instagram: APPLY_NOW, DOWNLOAD, GET_QUOTE, LEARN_MORE, SIGN_UP, SUBSCRIBE.
                                (SCREAMING_SNAKE form only; the platform supports a strict subset of Meta's
                                native catalog. Out-of-set values like BOOK_NOW / GET_STARTED are rejected.)
                              - Reddit: Apply Now, Contact Us, Download, Get a Quote, Learn More, Play Now,
                                Sign Up, View More, Watch Now, Book Now, Listen Now, Read More, Subscribe.

                            See `create_update_video_ad` for video-creative ads (different libraryId source +
                            stricter URL format).
                            

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ads_dataYesArray of IMAGE ads to create or update. Each item targets one or more of FB/IG/LinkedIn/Reddit; the platform creates one ad row per (ad, channel).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

While annotations already flag mutating/destructive behavior (readOnlyHint=false, destructiveHint=true), the description goes well beyond them: it discloses client-side validation that refuses what the platform UI rejects, server-side URL fanning across channels, DRAFT vs COMPLETED semantics (DRAFT persists locally without round-tripping to the channel API), the FB+IG body-text copy-across behavior, and the CTA subset limitation of Meta's catalog. Nothing contradicts the annotations; the description richly supplements them.

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

Conciseness4/5

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

The description is long but earned for a multi-channel create/update tool with per-channel validation rules; it is well-sectioned and front-loaded with the core purpose and the create/update rule. The 'ALSO KNOWN AS' and 'KEYWORDS' blocks are search-optimization padding that add little for an agent and inflate length — the only real bloat in an otherwise disciplined structure.

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?

For a tool this complex, coverage is exceptional: workflow, per-channel required/optional fields, validation caps, CTA enums, defaults, and sibling routing are all present. The one notable gap is the absence of any guidance on return values (what the tool returns on success — ad IDs, status, etc.), which matters more because there is no output schema; update semantics (overwrite vs merge) are also only implicit.

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

Parameters5/5

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

Despite 100% schema coverage, the description adds substantial meaning: it explains that `creativeID` is the integer imageLibraryId from `upload_image_creative` (NOT a URL), maps per-channel URL requirements and caps, defines `completionStatus` push semantics, documents that `redditThumbnailLibraryId` defaults to `creativeID`, and adds acceptance rules like `metadata.io` vs `https://metadata.io`. This is genuinely additive beyond the schema's own field descriptions.

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

Purpose5/5

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

The opening sentence states the exact verb (create OR update), resource (IMAGE or GIF ad), and scope (Facebook, Instagram, LinkedIn, Reddit), and the create/update distinction via `id` is made immediately. It explicitly names the sibling tools it is not (`create_update_document_ad` for DOCUMENT-only CTAs, `create_update_video_ad` for video creatives with a different libraryId source), so an agent can disambiguate without opening other schemas.

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

Usage Guidelines5/5

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

Provides explicit when/when-not guidance: include `id` to update, omit to create. It dictates the exact 3-step creative workflow (`upload_image_creative` → `creativeID`; `generate_brand_creative` → `upload_image_creative` → this tool), routes DOCUMENT-only CTAs to `create_update_document_ad`, and directs video-creative ads to `create_update_video_ad`. Alternatives and their selection conditions are stated outright rather than left to inference.

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