Skip to main content
Glama

Generate ads from a store, product, service or app URL

generate_ads_from_url
Destructive

Ads on demand: give the URL of an online store, a single product page, a service business's site, or an App Store / Google Play listing, and get paid-social ads made from the REAL products, prices, reviews and offers on that page (claims are verified against the page; nothing is invented). No brand setup needed. Pro, Scale and Agent plans. Pick the ads ONE of two ways: types (+ optional count, adFormats, animationStyle), or slots: up to 5 ads from the ad format catalog (call list_ad_formats first), each with its own inputs such as a script said word for word. slots can't be combined with types, count, adFormats or animationStyle. SPENDS CREDITS: 1 for reading the site + per ad: static-ad 6 (returns 2 A/B variants), ugc-ad 25, greenscreen-ad 25, animated-ad 37, music-ad 50; a slot costs its format's credits from list_ad_formats (+1 with render). Defaults (no types or slots): a store gets 3 static-ad + 1 ugc-ad (44 credits, 7 ads); a service business or app gets static-ad + ugc-ad + animated-ad (69 credits, 4 ads). Types: static-ad (2 finished image ads in different formats, e.g. review card + benefit callouts, for A/B testing; stores show the real product, service businesses and apps a scene of the service with their real logo), ugc-ad (9:16 presenter talking to camera, ~15s), greenscreen-ad (presenter reacting over a scrolling screenshot of the page), animated-ad (~30s narrated claymation / Pixar-style / felt / cartoon story ad), music-ad (~30s animated music video: a character sings an original song about a relatable moment, the product revealed in the last chorus; the agent picks the genre and look unless prompt asks for one). ASYNC: reading the site takes 15-30s before the jobId returns; generation then takes ~1-3 minutes. Poll get_job. Pass render=true for viewable PNG/MP4 files. Use prompt to steer every ad (theme, audience, angle, and for music-ad the genre or animation look). Billing is per ad: the reservation settles when the job finishes, every ad that wasn't produced (for example no usable product photo) is refunded, and a failed job is refunded in full.

Input Schema

NameRequiredDescriptionDefault
urlYesStore home page, product page, service business site, or App Store / Google Play listing. Bare domains work.
nameNo
countNoTotal ads (1-5); repeats the requested types.
slotsNoAds from the format catalog instead of `types` (up to 5 ads in total). Can't be combined with types, count, adFormats or animationStyle.
typesNoAd types to make (omit for the default pack).
promptNoFree-form creative steer applied to every ad, e.g. 'Halloween theme' or 'target new parents'.
renderNoAlso render PNG/MP4 files server-side (+1 credit).
languageNoLanguage to write the ads in: on-screen text, script and voice-over (ISO 639-1, e.g. 'es', 'de', 'fr'). Defaults to English. The store's facts and reviews are translated when its page is in another language; brand and product names, prices and discount codes stay as on the page.
adFormatsNoPin the static-ad layouts in order; formats without supporting data are skipped.
adAspectRatioNoFrame for static-ad (default 4:5). Video ads are always 9:16.
animationStyleNoLook for animated-ad (else chosen per brand).
presenterImageUrlNoOptional public image URL of the person (or character) to feature instead of a stock presenter: ugc-ad and greenscreen-ad film them, animated-ad and music-ad draw them in the film's style, and each static-ad decides how to show them. One clear, well-lit photo, at least 256px on the short side.

Output Schema

NameRequiredDescriptionDefault
jobIdYes
slotsNo
sourceNo
statusYes
pollUrlYes
creditsReservedYes
snackTypeSequenceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / slots
      Added value: +{
      +  "description": "Ads from the format catalog instead of `types` (up to 5 ads in total). Can't be combined with types, count, adFormats or animationStyle.",
      +  "items": {
      +    "properties": {
      +      "count": {
      +        "description": "Ads of this format (default 1).",
      +        "maximum": 5,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "formatId": {
      +        "description": "A format id from list_ad_formats.",
      +        "maxLength": 80,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "inputs": {
      +        "additionalProperties": {},
      +        "description": "The format's `fields` from list_ad_formats, keyed by field key. Text you supply is used word for word; leave a field out and it's written from the page.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "formatId"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 5,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedOutput schema / properties / slots
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "credits": {
      +        "type": "number"
      +      },
      +      "formatId": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "index": {
      +        "type": "number"
      +      },
      +      "snackType": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "index",
      +      "formatId",
      +      "snackType",
      +      "credits"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed2 schema fields changed
    • addedInput schema / properties / presenterImageUrl
      Added value: +{
      +  "description": "Optional public image URL of the person (or character) to feature instead of a stock presenter: ugc-ad and greenscreen-ad film them, animated-ad and music-ad draw them in the film's style, and each static-ad decides how to show them. One clear, well-lit photo, at least 256px on the short side.",
      +  "format": "uri",
      +  "maxLength": 2000,
      +  "type": "string"
      +}
    • changedInput schema / properties / render / description
      Previous value: -"Also render PNG/MP4 files server-side (+3 credits)."New value: +"Also render PNG/MP4 files server-side (+1 credit)."
  3. Changed1 schema field changed
    • changedInput schema / properties / adFormats / items / enum
      Previous value: -[
      -  "review_card",
      -  "us_vs_them",
      -  "benefit_callouts",
      -  "platform_native",
      -  "offer_stack",
      -  "problem_solution",
      -  "reasons_listicle",
      -  "ugc_photo",
      -  "social_proof_stat",
      -  "press_bar",
      -  "product_hero"
      -]New value: +[
      +  "review_card",
      +  "us_vs_them",
      +  "benefit_callouts",
      +  "platform_native",
      +  "offer_stack",
      +  "problem_solution",
      +  "reasons_listicle",
      +  "ugc_photo",
      +  "social_proof_stat",
      +  "press_bar",
      +  "product_hero",
      +  "service_hero"
      +]
  4. Changed6 schema fields changed
    • changedInput schema / properties / language / description
      Previous value: -"ISO 639-1 language override (defaults to the page's language)."New value: +"Language to write the ads in: on-screen text, script and voice-over (ISO 639-1, e.g. 'es', 'de', 'fr'). Defaults to English. The store's facts and reviews are translated when its page is in another language; brand and product names, prices and discount codes stay as on the page."
    • addedInput schema / properties / language / enum
      Added value: +[
      +  "en",
      +  "es",
      +  "fr",
      +  "de",
      +  "it",
      +  "pt",
      +  "nl",
      +  "pl",
      +  "sq",
      +  "tr",
      +  "ru",
      +  "ar",
      +  "hi",
      +  "id",
      +  "vi",
      +  "th",
      +  "ja",
      +  "ko",
      +  "zh"
      +]
    • removedInput schema / properties / language / maxLength
      Removed value: -5
    • removedInput schema / properties / language / minLength
      Removed value: -2
    • changedInput schema / properties / types / items / enum
      Previous value: -[
      -  "static-ad",
      -  "ugc-ad",
      -  "animated-ad",
      -  "greenscreen-ad"
      -]New value: +[
      +  "static-ad",
      +  "ugc-ad",
      +  "animated-ad",
      +  "greenscreen-ad",
      +  "music-ad"
      +]
    • changedInput schema / properties / types / maxItems
      Previous value: -4New value: +5
  5. Added

TDQS

A4.5/5.0
Behavior4/5

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

Goes well past the annotations: per-ad credit prices, the +1 render surcharge, the site-read credit, refund rules for unproduced or failed ads, and the async timing (15-30s site read, ~1-3 min generation, poll get_job). Consistent with destructiveHint=true and openWorldHint=true since it spends credits against a live fetch. Minor gap: it doesn't say what happens on an unparseable or JS-heavy page beyond the 'no usable product photo' refund example.

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?

Front-loaded with purpose and mode selection, which is correct, but the middle is an undifferentiated block mixing cost tables, per-type prose, and async notes in one paragraph. Given 12 params and a real credit model the length is defensible, but it would scan far better as separated mode/cost/lifecycle segments.

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

Completeness5/5

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

Given an output schema exists, the description needn't describe return values, and it uses the freed space for the things the schema can't carry: async lifecycle, polling target (get_job), cost accounting, refund behavior, and mode selection. An agent can invoke this correctly on the first attempt.

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

Parameters4/5

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

Schema coverage is already 92%, and the description still adds real value: mode exclusivity between `slots` and types/count/adFormats/animationStyle, what `slots.inputs` means (verbatim text vs auto-written from page), and what `prompt` steers (theme, audience, angle, music genre). Undocumented here are `name` and `language`, but the schema covers both adequately.

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?

States a specific verb+resource (generate paid-social ads from a URL) and enumerates the exact URL classes accepted: store, product page, service site, App Store/Google Play listing. It also names the source of truth (real products, prices, reviews on the page) and the two construction modes, so an agent can separate it from create_video, generate_meme, or create_social_post without opening the schema.

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?

Explicitly routes between the two mutually exclusive paths — `types` (+count/adFormats/animationStyle) versus `slots` — and states the constraint that slots can't be combined with the others. It names the prerequisite sibling (call list_ad_formats first), documents the default pack when neither is supplied, and reports the plan eligibility (Pro, Scale, Agent).

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