Skip to main content
Glama

Server Details

Marketing on autopilot: 897 tools, usable alone. DM automations, ads on 12 platforms incl. AppLovin.

Glama couldn't complete the latest health check. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
Uptime
66.0% over 32 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP
URL
Repository
hermoso-ai/hermoso
GitHub Stars
0
Server Listing
Hermoso

TDQS

A3.6/5.0

Scored across 183 tools

Disambiguation5/5

Each tool has a clearly defined purpose with extensive cross-referencing ('use X for this, not Y'), making even similar-sounding tools (generate_video vs render_ad vs make_explainer) distinguishable. The only duplicate is remix_static, which is explicitly documented as an alias for clone_static, so it does not cause real confusion.

Naming Consistency4/5

The overwhelming majority follow a snake_case verb_noun pattern (post_to_*, list_*, generate_*, update_*), with no camelCase mixing. Minor deviations exist, such as noun-only names (billing_status, hermoso_capabilities, product_sizzle) and a few imperative verbs without objects (remember, forget), but these are isolated and do not undermine predictability.

Tool Count1/5

With 183 tools, this is an extreme mismatch for an MCP server, far beyond the 3–15 typical range. Even though the descriptions are excellent and the server provides find_tools/enable_tools to manage discoverability, the sheer volume will bloat context windows and degrade tool selection reliability.

Completeness3/5

The set is exceptionally broad, covering creative generation, editing, publishing, scheduling, research, analytics, file storage, workspace management, and billing. However, there are notable gaps: no way to edit/delete published social posts (despite descriptions referencing manage_meta_post, manage_linkedin_post, delete_x_post), and no direct ad campaign management tools, leaving lifecycle coverage incomplete for several workflows.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changededit_video3 fields changed
      • changedInput schema / properties / keepAudio / description
        Previous value: -"default true — keep the source clip’s audio track. Set false to return the edit silent"New value: +"default true: keep the source audio; false = silent"
      • addedInput schema / properties / previewAt
        Added value: +{
        +  "description": "second to preview (default 0); resend with previewStill",
        +  "type": "number"
        +}
      • changedInput schema / properties / video / description
        Previous value: -"the source video URL (from a previous render, a job result, or list_library)"New value: +"the source video URL (a render, job result or list_library)"
    • Changedpost_edit17 fields changed
      • changedInput schema / properties / ops / items / properties / background / description
        Previous value: -"append_card: card background — hex or a color name ('red', 'navy'…); the user's stated color always wins over the brand palette"New value: +"append_card: hex or a colour name; the user's colour beats the brand palette"
      • addedInput schema / properties / ops / items / properties / bridge / properties / sound / description
        Added value: +"'auto' default, 'own', 'impact', 'whoosh', 'none', or an audio URL (find_sound)"
      • removedInput schema / properties / ops / items / properties / bridge / properties / sound / enum
        Removed value: -[
        -  "auto",
        -  "own",
        -  "impact",
        -  "whoosh",
        -  "none"
        -]
      • changedInput schema / properties / ops / items / properties / card_html / description
        Previous value: -"append_card: your OWN full-frame card design as inline-styled HTML ({{logo}} inserts the real brand logo) — use when the standard layout cannot honor the request"New value: +"append_card: your OWN full-frame card as inline-styled HTML ({{logo}} = the brand logo)"
      • changedInput schema / properties / ops / items / properties / corner / description
        Previous value: -"watermark corner (default br)"New value: +"watermark corner (default br), or x/y"
      • changedInput schema / properties / ops / items / properties / headline / description
        Previous value: -"append_card: big line (defaults to the brand name)"New value: +"append_card: big line (default: brand name)"
      • addedInput schema / properties / ops / items / properties / intensity / anyOf
        Added value: +[
        +  {
        +    "enum": [
        +      "default",
        +      "strong"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • changedInput schema / properties / ops / items / properties / intensity / description
        Previous value: -"grain look"New value: +"grain: or 0-1 (default 0.25)"
      • removedInput schema / properties / ops / items / properties / intensity / enum
        Removed value: -[
        -  "default",
        -  "strong"
        -]
      • removedInput schema / properties / ops / items / properties / intensity / type
        Removed value: -"string"
      • changedInput schema / properties / ops / items / properties / position / description
        Previous value: -"text: where"New value: +"text: where, or x/y"
      • changedInput schema / properties / ops / items / properties / seconds / description
        Previous value: -"fade_out 0.3-3s / append_card 2-5s / crossfade 0.2-1.5s"New value: +"fade_out 0.3-3s / append_card 2-5s / transition 0.2-1.5s"
      • changedInput schema / properties / ops / items / properties / sub / description
        Previous value: -"append_card: the pill line (defaults to the website) / text: a smaller second line"New value: +"append_card: pill line (default: website) / text: a second, smaller line"
      • changedInput schema / properties / ops / items / properties / transition / description
        Previous value: -"join"New value: +"join: 'cut' default, 'crossfade', or any ffmpeg xfade name (wipeleft…)"
      • removedInput schema / properties / ops / items / properties / transition / enum
        Removed value: -[
        -  "cut",
        -  "crossfade"
        -]
      • addedInput schema / properties / ops / items / properties / x
        Added value: +{
        +  "description": "text/watermark centre: 0-1 of frame, or px",
        +  "type": "number"
        +}
      • addedInput schema / properties / ops / items / properties / y
        Added value: +{
        +  "type": "number"
        +}
  2. 1 tool update
    • Changedpost_edit2 fields changed
      • addedInput schema / properties / ops / items / properties / clips / items / properties / match
        Added value: +{}
      • addedInput schema / properties / ops / items / properties / match
        Added value: +{
        +  "description": "join: seam match, 'auto' default | 'off' | {grade,level,grain,blur,strength}"
        +}
  3. 1 tool update
    • Changededit_video8 fields changed
      • changedInput schema / properties / elements / description
        Previous value: -"OPTIONAL identity/product grounding (≤4): a creator portrait or the real product photo, so the edit restores the REAL thing instead of re-inventing it. Describe each one in the instruction. Leave out for a plain restyle"New value: +"OPTIONAL identity/product grounding (≤4): a creator portrait or the real product photo, so the edit restores the REAL thing. Describe each one in the instruction"
      • changedInput schema / properties / instruction / description
        Previous value: -"the exact transformation to apply, in the user’s own words"New value: +"the change, in the user’s own words"
      • changedInput schema / properties / interactionId / description
        Previous value: -"OPTIONAL: the interactionId an earlier Gemini Omni render or edit returned. The edit then continues that clip on the SAME Omni model from its own stored context (identity-true, no re-upload, usually cheaper). If that edit cannot run, the clip is edited by the video editor instead and the reply says so."New value: +"OPTIONAL: the interactionId an earlier Gemini Omni render or edit returned; the edit continues that clip on the same Omni model. If it cannot run, the video editor edits it and the reply says so."
      • addedInput schema / properties / lighting
        Added value: +{
        +  "description": "default auto: keep the source light unless the change needs new light (night, a lamp, fire). 'preserve' or 'relight' forces it",
        +  "enum": [
        +    "auto",
        +    "preserve",
        +    "relight"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / literal
        Added value: +{
        +  "description": "true = send the instruction exactly as written, with no preserve/lock wrapper",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / previewFirstFrame
        Added value: +{
        +  "description": "true = edit ONE still of the first frame first and quote the clip; the paid clip does not run",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / previewStill
        Added value: +{
        +  "description": "the still a previewFirstFrame call returned; the clip then matches the changed thing to it",
        +  "type": "string"
        +}
      • addedInput schema / properties / reference
        Added value: +{
        +  "description": "OPTIONAL image URL that anchors the MATERIAL of what changes (a fabric, a finish, a colour swatch, the real product). Only its surface is used, never its framing or light",
        +  "type": "string"
        +}
  4. 1 tool update
    • Changedhook_variants1 field changed
      • addedInput schema / properties / hooks
        Added value: +{
        +  "description": "your own openings, one version each",
        +  "items": {
        +    "properties": {
        +      "cutAt": {
        +        "description": "url: override the found payoff cut",
        +        "type": "number"
        +      },
        +      "mechanic": {
        +        "type": "string"
        +      },
        +      "prompt": {
        +        "type": "string"
        +      },
        +      "start": {
        +        "description": "url: skip the video’s own first seconds",
        +        "type": "number"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
  5. 5 tool updates
    • Changedadd_subtitles2 fields changed
      • addedInput schema / properties / auto
        Added value: +{
        +  "enum": [
        +    "sentences",
        +    "words"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / wordsPerCue
        Added value: +{
        +  "type": "number"
        +}
    • Changedanalyze_video3 fields changed
      • addedInput schema / properties / anchors
        Added value: +{
        +  "description": "{afterWord|beforeWord|atWord, occurrence?, offset?} -> s",
        +  "items": {},
        +  "type": "array"
        +}
      • changedInput schema / properties / frames / description
        Previous value: -"true = also return the frames as images"New value: +"also return the frames as images"
      • addedInput schema / properties / words
        Added value: +{
        +  "description": "true | 'only': each spoken word's start/end"
        +}
    • Addedfind_sound
    • Addedmake_insert
    • Changedpost_edit1 field changed
      • addedInput schema / properties / ops / items / properties / textStyle
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    }
        +  ]
        +}
  6. 8 tool updates
    • Changedclone_static1 field changed
      • changedInput schema / properties / imageUrl / description
        Previous value: -"the URL of the static ad image to clone"New value: +"the URL of the static ad image to clone; a real person in it confirms their likeness consent"
    • Changedgenerate_avatar1 field changed
      • changedInput schema / properties / image / description
        Previous value: -"local path or URL of the presenter portrait"New value: +"local path or URL of the presenter portrait; a real person’s photo confirms their likeness consent"
    • Changedgenerate_image1 field changed
      • changedInput schema / properties / refImages / description
        Previous value: -"local file paths or URLs of product/logo references to composite in. ON THE POSE MODELS — any row hermoso_capabilities marks `needsRefs` with a `refsMax`, such as putting your product in someone’s hands or a virtual try-on — THE ORDER IS THE CONTRACT AND IT IS NOT A COMPOSITE: refImages[0] is the PERSON photo, and the rest (up to `refsMax` minus one) are the product or garment photos. Reversed, you get the product wearing the person. A 4th product is dropped and the reply says so."New value: +"local file paths or URLs of product/logo references to composite in. ON THE POSE MODELS — any row hermoso_capabilities marks `needsRefs` with a `refsMax`, such as putting your product in someone’s hands or a virtual try-on — THE ORDER IS THE CONTRACT AND IT IS NOT A COMPOSITE: refImages[0] is the PERSON photo, and the rest (up to `refsMax` minus one) are the product or garment photos. Reversed, you get the product wearing the person. A 4th product is dropped and the reply says so. A real person’s photo confirms their likeness consent."
    • Changedgenerate_video1 field changed
      • changedInput schema / properties / refImage / description
        Previous value: -"local path or URL to anchor the first frame"New value: +"local path or URL to anchor the first frame; a real person’s photo here or in refImages confirms their likeness consent"
    • Changedrecast_motion1 field changed
      • changedInput schema / properties / image / description
        Previous value: -"the actor/character image URL (who should appear)"New value: +"the actor/character image URL (who should appear); a real person’s photo confirms their likeness consent"
    • Changedremix_static1 field changed
      • changedInput schema / properties / imageUrl / description
        Previous value: -"the URL of the static ad image to clone"New value: +"the URL of the static ad image to clone; a real person in it confirms their likeness consent"
    • Changedrender_ad1 field changed
      • changedInput schema / properties / creator / description
        Previous value: -"CAST A SAVED CREATOR in this ad — their id from list_creators, or the name you know them by (“Sarah”). Their saved portrait becomes the on-camera identity for the whole spot, so the same face carries across every act and across every ad you render for this brand — and because we already have their picture, the character portrait this pipeline would otherwise generate is skipped, so casting somebody costs LESS than not casting them. Omit to let the ad cast a fresh person — EXCEPT for a CREATOR account (onboarded from their own @handle): their own saved likeness is cast by default on any plan with a person on camera, and the read-back says `default:true`; pass \"none\" to render without them. Refused for free, with nothing rendered, if the name matches nobody or more than one creator, if an explicitly named creator is cast on a plan with nobody on camera, or if they are a REAL person with no likeness consent on file."New value: +"CAST A SAVED CREATOR in this ad — their id from list_creators, or the name you know them by (“Sarah”). Their saved portrait becomes the on-camera identity for the whole spot, so the same face carries across every act and across every ad you render for this brand — and because we already have their picture, the character portrait this pipeline would otherwise generate is skipped, so casting somebody costs LESS than not casting them. Omit to let the ad cast a fresh person — EXCEPT for a CREATOR account (onboarded from their own @handle): their own saved likeness is cast by default on any plan with a person on camera, and the read-back says `default:true`; pass \"none\" to render without them. Refused for free, with nothing rendered, if the name matches nobody or more than one creator, or if an explicitly named creator is cast on a plan with nobody on camera. Casting a REAL person confirms their likeness consent."
    • Changedsave_creator1 field changed
      • removedInput schema / properties / consented
        Removed value: -{
        -  "description": "REAL people only: the user has confirmed that person consented to their likeness being used in ads",
        -  "type": "boolean"
        -}
  7. 9 tool updates
    • Changedadd_subtitles2 fields changed
      • changedInput schema / properties / textStyle / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "pill",
        -      "editorial",
        -      "bold",
        -      "minimal",
        -      "handwritten",
        -      "boxed"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "properties": {
        -      "background": {
        -        "description": "none | pill | #hex box",
        -        "type": "string"
        -      },
        -      "color": {
        -        "description": "#hex",
        -        "type": "string"
        -      },
        -      "font": {
        -        "enum": [
        -          "sans",
        -          "serif",
        -          "elegant",
        -          "condensed",
        -          "hand"
        -        ],
        -        "type": "string"
        -      },
        -      "italic": {
        -        "type": "boolean"
        -      },
        -      "outline": {
        -        "type": "boolean"
        -      },
        -      "position": {
        -        "enum": [
        -          "top",
        -          "center",
        -          "lower",
        -          "bottom"
        -        ],
        -        "type": "string"
        -      },
        -      "preset": {
        -        "enum": [
        -          "pill",
        -          "editorial",
        -          "bold",
        -          "minimal",
        -          "handwritten",
        -          "boxed"
        -        ],
        -        "type": "string"
        -      },
        -      "shadow": {
        -        "type": "boolean"
        -      },
        -      "size": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "s",
        -              "m",
        -              "l",
        -              "xl"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "number"
        -          }
        -        ]
        -      },
        -      "textCase": {
        -        "enum": [
        -          "as-is",
        -          "upper",
        -          "lower",
        -          "title"
        -        ],
        -        "type": "string"
        -      },
        -      "tilt": {
        -        "description": "degrees, ±12",
        -        "type": "number"
        -      },
        -      "weight": {
        -        "type": "number"
        -      }
        -    },
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "properties": {
        +      "background": {
        +        "description": "none|pill|a colour",
        +        "type": "string"
        +      },
        +      "cardColor": {
        +        "type": "string"
        +      },
        +      "color": {
        +        "description": "any CSS colour",
        +        "type": "string"
        +      },
        +      "describe": {
        +        "description": "the look in words",
        +        "type": "string"
        +      },
        +      "font": {
        +        "description": "sans|serif|elegant|condensed|hand or any Google Fonts family",
        +        "type": "string"
        +      },
        +      "italic": {
        +        "type": "boolean"
        +      },
        +      "outline": {
        +        "type": "boolean"
        +      },
        +      "outlineColor": {
        +        "type": "string"
        +      },
        +      "position": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "number"
        +          }
        +        ],
        +        "description": "top|center|lower|bottom or 0.05-0.95 from the top"
        +      },
        +      "preset": {
        +        "type": "string"
        +      },
        +      "shadow": {
        +        "type": "boolean"
        +      },
        +      "size": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "number"
        +          }
        +        ],
        +        "description": "s|m|l|xl, '120px', or a 0.015-0.15 frame fraction"
        +      },
        +      "subFont": {
        +        "type": "string"
        +      },
        +      "subItalic": {
        +        "type": "boolean"
        +      },
        +      "textCase": {
        +        "enum": [
        +          "as-is",
        +          "upper",
        +          "lower",
        +          "title"
        +        ],
        +        "type": "string"
        +      },
        +      "tilt": {
        +        "description": "degrees, ±45",
        +        "type": "number"
        +      },
        +      "weight": {
        +        "type": "number"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / textStyle / description
        Previous value: -"the look: a preset or overrides; omit for the default"New value: +"the look: words, a preset or fields; omit for the default"
    • Changedanalyze_video1 field changed
      • addedInput schema / properties / frames
        Added value: +{
        +  "description": "true = also return the frames as images",
        +  "type": "boolean"
        +}
    • Changedclip_video2 fields changed
      • changedInput schema / properties / aspectRatio / description
        Previous value: -"clip shape — '9:16' (default) vertical for Reels/Shorts/TikTok; 'keep' leaves the source framing untouched"New value: +"clip shape: '9:16' (default), '1:1', '16:9', any 'W:H', or 'keep' for the source framing"
      • removedInput schema / properties / aspectRatio / enum
        Removed value: -[
        -  "9:16",
        -  "1:1",
        -  "16:9",
        -  "keep"
        -]
    • Addedgenerate_music
    • Changedmake_explainer3 fields changed
      • changedInput schema / properties / music / description
        Previous value: -"music bed under the narration, measured to sit about 14 dB under the voice and sidechain-ducked beneath it. Omit and the KIDS and FAIRYTALE channels get their recommended bed COMPOSED for this film — those two are the only channels a bed is due on unasked, and it costs a small flat fee; every other channel ships dry. 'off' forces silence. 'library' takes a free curated track only, and ships dry when none is on file. NAME A MOOD — upbeat / calm / warm / epic / tense / playful / elegant / hype / chill / dramatic — to compose one on ANY channel, at the same fee. hermoso_capabilities reports the exact figure as explainerMusicCredits; quote it before you turn a bed on or pick a mood."New value: +"music bed under the narration, measured to sit about 14 dB under the voice and sidechain-ducked beneath it. Omit and the KIDS and FAIRYTALE channels get their recommended bed COMPOSED for this film — those two are the only channels a bed is due on unasked, and it costs a small flat fee; every other channel ships dry. 'off' forces silence. 'library' takes a free curated track only, and ships dry when none is on file. NAME A MOOD (upbeat / calm / warm / epic / tense / playful / elegant / hype / chill / dramatic) or DESCRIBE it in words to compose one on ANY channel, at the same fee. hermoso_capabilities reports the exact figure as explainerMusicCredits; quote it before you turn a bed on or pick a mood."
      • changedInput schema / properties / style / description
        Previous value: -"visual style. 'cinematic' (default) is photoreal; the rest are non-photoreal styled looks — editorial_collage (halftone cutouts + marker accents), flat_vector, stickman, whiteboard, ink_marker, silhouette, storybook (gouache), paper_diorama, isometric, claymation, pixel_art, watercolor, fluffy_toy (felted plush), low_poly, stylized_3d (matte clay render), studio_3d (preschool toy 3D on a white sweep — the Kids default), mannequin (clay-render reenactment figures — a History alternate). Ask the user which they want rather than picking silently; a styled pick costs more (see the cost note)."New value: +"visual style: 'cinematic' (default, photoreal); styled shortcuts editorial_collage, flat_vector, stickman, whiteboard, ink_marker, silhouette, storybook, paper_diorama, isometric, claymation, pixel_art, watercolor, fluffy_toy, low_poly, stylized_3d, studio_3d (the Kids default), mannequin; or ANY look described in words ('80s anime cel animation'), locked across every frame. Ask rather than pick silently; a styled look costs more."
      • removedInput schema / properties / style / enum
        Removed value: -[
        -  "cinematic",
        -  "editorial_collage",
        -  "flat_vector",
        -  "stickman",
        -  "whiteboard",
        -  "ink_marker",
        -  "silhouette",
        -  "storybook",
        -  "paper_diorama",
        -  "isometric",
        -  "claymation",
        -  "pixel_art",
        -  "watercolor",
        -  "fluffy_toy",
        -  "low_poly",
        -  "stylized_3d",
        -  "studio_3d",
        -  "mannequin"
        -]
    • Changedmake_template_ad1 field changed
      • changedInput schema / properties / config / description
        Previous value: -"the template config — MUST include config.template (one of the template ids above) plus that template's fields"New value: +"MUST include config.template: 'custom' or a preset id above, plus its fields"
    • Changedmake_thumbnail7 fields changed
      • changedInput schema / properties / font / description
        Previous value: -"headline font (default Anton). Alternatives incl. Bebas Neue, Oswald, Archivo Black, Montserrat, Inter, Playfair Display"New value: +"headline font: Anton (default) or any Google Fonts family"
      • changedInput schema / properties / framework / description
        Previous value: -"concept framework id (default 'posed_portrait'); see the list in this description / hermoso_capabilities"New value: +"concept framework id (default 'posed_portrait'), or your own concept in words"
      • changedInput schema / properties / headlinePlace / description
        Previous value: -"where the headline sits — never over the face (default 'bottom')"New value: +"bottom (default), top, center, or a 0-1 fraction from the top; never over the face"
      • removedInput schema / properties / headlinePlace / enum
        Removed value: -[
        -  "bottom",
        -  "top",
        -  "center"
        -]
      • changedInput schema / properties / overlayStyle / description
        Previous value: -"headline style: 'beast' (default, white + heavy black stroke) / 'fire' / 'neon-lime' / 'clean-glass' / 'marker'"New value: +"headline style: beast (default), fire, neon-lime, clean-glass, marker, or your own CSS declarations"
      • changedInput schema / properties / tweak / description
        Previous value: -"surgical pixel-faithful edit of a FINISHED thumbnail — needs sourceImage"New value: +"surgical pixel-faithful edit of a FINISHED thumbnail (needs sourceImage): kind emotion / background / background_color / rim_light, or any other kind with the edit in words as value"
      • removedInput schema / properties / tweak / properties / kind / enum
        Removed value: -[
        -  "emotion",
        -  "background",
        -  "background_color",
        -  "rim_light"
        -]
    • Changedmultiply_ad2 fields changed
      • changedInput schema / properties / axes / description
        Previous value: -"which axes to vary (default: all four)"New value: +"what to vary: character, outfit, location, objects (default all four), or your own, e.g. \"season\""
      • removedInput schema / properties / axes / items / enum
        Removed value: -[
        -  "character",
        -  "outfit",
        -  "location",
        -  "objects"
        -]
    • Changedrender_ad5 fields changed
      • addedInput schema / properties / music / anyOf
        Added value: +[
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / music / description
        Previous value: -"licensed music bed on/off (default on)"New value: +"music bed: on (default), false, or the bed described in words ('lo-fi jazz, brushed drums')"
      • removedInput schema / properties / music / type
        Removed value: -"boolean"
      • changedInput schema / properties / textStyle / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "pill",
        -      "editorial",
        -      "bold",
        -      "minimal",
        -      "handwritten",
        -      "boxed"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "properties": {
        -      "background": {
        -        "description": "\"none\", \"pill\", or a #hex box",
        -        "type": "string"
        -      },
        -      "cardColor": {
        -        "description": "#hex end card background",
        -        "type": "string"
        -      },
        -      "color": {
        -        "description": "#hex",
        -        "type": "string"
        -      },
        -      "font": {
        -        "enum": [
        -          "sans",
        -          "serif",
        -          "elegant",
        -          "condensed",
        -          "hand"
        -        ],
        -        "type": "string"
        -      },
        -      "italic": {
        -        "type": "boolean"
        -      },
        -      "outline": {
        -        "type": "boolean"
        -      },
        -      "position": {
        -        "enum": [
        -          "top",
        -          "center",
        -          "lower",
        -          "bottom"
        -        ],
        -        "type": "string"
        -      },
        -      "preset": {
        -        "enum": [
        -          "pill",
        -          "editorial",
        -          "bold",
        -          "minimal",
        -          "handwritten",
        -          "boxed"
        -        ],
        -        "type": "string"
        -      },
        -      "shadow": {
        -        "type": "boolean"
        -      },
        -      "size": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "s",
        -              "m",
        -              "l",
        -              "xl"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "number"
        -          }
        -        ]
        -      },
        -      "subFont": {
        -        "enum": [
        -          "sans",
        -          "serif",
        -          "elegant",
        -          "condensed",
        -          "hand"
        -        ],
        -        "type": "string"
        -      },
        -      "subItalic": {
        -        "type": "boolean"
        -      },
        -      "textCase": {
        -        "enum": [
        -          "as-is",
        -          "upper",
        -          "lower",
        -          "title"
        -        ],
        -        "type": "string"
        -      },
        -      "tilt": {
        -        "description": "degrees, ±12",
        -        "type": "number"
        -      },
        -      "weight": {
        -        "type": "number"
        -      }
        -    },
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "properties": {
        +      "background": {
        +        "description": "none|pill|a colour",
        +        "type": "string"
        +      },
        +      "cardColor": {
        +        "type": "string"
        +      },
        +      "color": {
        +        "description": "any CSS colour",
        +        "type": "string"
        +      },
        +      "describe": {
        +        "description": "the look in words",
        +        "type": "string"
        +      },
        +      "font": {
        +        "description": "sans|serif|elegant|condensed|hand or any Google Fonts family",
        +        "type": "string"
        +      },
        +      "italic": {
        +        "type": "boolean"
        +      },
        +      "outline": {
        +        "type": "boolean"
        +      },
        +      "outlineColor": {
        +        "type": "string"
        +      },
        +      "position": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "number"
        +          }
        +        ],
        +        "description": "top|center|lower|bottom or 0.05-0.95 from the top"
        +      },
        +      "preset": {
        +        "type": "string"
        +      },
        +      "shadow": {
        +        "type": "boolean"
        +      },
        +      "size": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "number"
        +          }
        +        ],
        +        "description": "s|m|l|xl, '120px', or a 0.015-0.15 frame fraction"
        +      },
        +      "subFont": {
        +        "type": "string"
        +      },
        +      "subItalic": {
        +        "type": "boolean"
        +      },
        +      "textCase": {
        +        "enum": [
        +          "as-is",
        +          "upper",
        +          "lower",
        +          "title"
        +        ],
        +        "type": "string"
        +      },
        +      "tilt": {
        +        "description": "degrees, ±45",
        +        "type": "number"
        +      },
        +      "weight": {
        +        "type": "number"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • changedInput schema / properties / textStyle / description
        Previous value: -"THE LOOK of captions and the end card — only meaningful with captions:true or endCard:true, and only when the user described a look. Presets: editorial (a large elegant serif title mid-frame with a small italic line under it, no box), bold (tall condensed caps with a black outline), minimal (small lowercase near the bottom), handwritten (tilted marker), boxed (dark words on a white box), pill (the plain default). Pass a preset name, or an object with a preset plus overrides. A caption written \"TITLE · small line\" puts the part after the middle dot on a second line. An invalid field is refused by name before anything renders."New value: +"THE LOOK of captions and the end card, only with captions or endCard and only when the user described one: the look in WORDS (\"chunky yellow comic letters, purple outline\"), a preset (editorial: big serif title + small italic line; bold: condensed caps, outline; minimal; handwritten; boxed; pill, the default), or fields. \"TITLE · small line\" puts the part after the dot on a second line."
  8. 1 tool update
    • Changedadd_subtitles1 field changed
      • addedInput schema / properties / cues
        Added value: +{
        +  "description": "your own lines in seconds, no overlap, max 90 chars, no emoji",
        +  "items": {
        +    "properties": {
        +      "end": {
        +        "type": "number"
        +      },
        +      "start": {
        +        "type": "number"
        +      },
        +      "text": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "text",
        +      "start",
        +      "end"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 400,
        +  "type": "array"
        +}
  9. 1 tool update
    • Changedpost_edit6 fields changed
      • addedInput schema / properties / ops / items / properties / bridge / properties / cutAt / description
        Added value: +"omit: found from the footage"
      • removedInput schema / properties / ops / items / properties / bridge / properties / holdOn
        Removed value: -{
        -  "enum": [
        -    "hook",
        -    "clip"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / ops / items / properties / bridge / properties / kind / enum
        Previous value: -[
        -  "impact",
        -  "spoken",
        -  "text"
        -]New value: +[
        +  "impact",
        +  "text"
        +]
      • removedInput schema / properties / ops / items / properties / bridge / properties / line
        Removed value: -{
        -  "type": "string"
        -}
      • changedInput schema / properties / ops / items / properties / bridge / properties / sound / enum
        Previous value: -[
        -  "impact",
        -  "whoosh",
        -  "none"
        -]New value: +[
        +  "auto",
        +  "own",
        +  "impact",
        +  "whoosh",
        +  "none"
        +]
      • removedInput schema / properties / ops / items / properties / bridge / properties / voice
        Removed value: -{
        -  "description": "spoken: 'female'|'male'",
        -  "type": "string"
        -}
  10. 1 tool update
    • Changedpost_edit1 field changed
      • addedInput schema / properties / ops / items / properties / bridge
        Added value: +{
        +  "description": "join: connects the hook to the first clip",
        +  "properties": {
        +    "cutAt": {
        +      "type": "number"
        +    },
        +    "flash": {
        +      "type": "boolean"
        +    },
        +    "holdOn": {
        +      "enum": [
        +        "hook",
        +        "clip"
        +      ],
        +      "type": "string"
        +    },
        +    "kind": {
        +      "enum": [
        +        "impact",
        +        "spoken",
        +        "text"
        +      ],
        +      "type": "string"
        +    },
        +    "line": {
        +      "type": "string"
        +    },
        +    "matchCut": {
        +      "type": "number"
        +    },
        +    "shake": {
        +      "type": "boolean"
        +    },
        +    "sound": {
        +      "enum": [
        +        "impact",
        +        "whoosh",
        +        "none"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "type": "string"
        +    },
        +    "then": {
        +      "type": "string"
        +    },
        +    "voice": {
        +      "description": "spoken: 'female'|'male'",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "kind"
        +  ],
        +  "type": "object"
        +}
  11. 1 tool update
    • Changedpost_edit11 fields changed
      • addedInput schema / properties / ops / items / properties / clips
        Added value: +{
        +  "description": "join: the clips after this video",
        +  "items": {
        +    "properties": {
        +      "end": {
        +        "type": "number"
        +      },
        +      "start": {
        +        "type": "number"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / ops / items / properties / end / description
        Previous value: -"trim/mute window end (s)"New value: +"trim/mute/text window end (s)"
      • changedInput schema / properties / ops / items / properties / op / enum
        Previous value: -[
        -  "trim",
        -  "speed",
        -  "mute",
        -  "audio_gain",
        -  "fade_out",
        -  "append_card",
        -  "watermark",
        -  "grain"
        -]New value: +[
        +  "trim",
        +  "speed",
        +  "mute",
        +  "audio_gain",
        +  "fade_out",
        +  "append_card",
        +  "watermark",
        +  "grain",
        +  "text",
        +  "join"
        +]
      • addedInput schema / properties / ops / items / properties / position
        Added value: +{
        +  "description": "text: where",
        +  "enum": [
        +    "top",
        +    "center",
        +    "lower",
        +    "bottom"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / ops / items / properties / seconds / description
        Previous value: -"fade_out 0.3-3s / append_card 2-5s"New value: +"fade_out 0.3-3s / append_card 2-5s / crossfade 0.2-1.5s"
      • changedInput schema / properties / ops / items / properties / start / description
        Previous value: -"trim/mute window start (s)"New value: +"trim/mute/text window start (s)"
      • addedInput schema / properties / ops / items / properties / style
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    }
        +  ],
        +  "description": "text: a look name or a textStyle"
        +}
      • changedInput schema / properties / ops / items / properties / sub / description
        Previous value: -"append_card: the pill line (defaults to the brand website)"New value: +"append_card: the pill line (defaults to the website) / text: a smaller second line"
      • addedInput schema / properties / ops / items / properties / text
        Added value: +{
        +  "description": "text: the words, verbatim",
        +  "type": "string"
        +}
      • addedInput schema / properties / ops / items / properties / transition
        Added value: +{
        +  "description": "join",
        +  "enum": [
        +    "cut",
        +    "crossfade"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / videoUrl / description
        Previous value: -"the served URL of the video to edit"New value: +"the video to edit: a render / Library URL, a direct file, or a public post link"
  12. 2 tool updates
    • Changedlist_published_posts1 field changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "nextCursor from a previous reply: the next, older page",
        +  "type": "string"
        +}
    • Changedpost_performance1 field changed
      • changedInput schema / properties / days / description
        Previous value: -"look back N days (1-730), archived posts included; omit for the recent posts only"New value: +"look back N days (1-730) over the whole history; omit for the recent posts only"
  13. 15 tool updates
    • Changedduplicate_scheduled2 fields changed
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
    • Changedpost_performance1 field changed
      • addedInput schema / properties / days
        Added value: +{
        +  "description": "look back N days (1-730), archived posts included; omit for the recent posts only",
        +  "type": "number"
        +}
    • Changedpost_to_bluesky6 fields changed
      • addedInput schema / properties / allowDuplicate
        Added value: +{
        +  "description": "post it even though an identical post was just made",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / hook
        Added value: +{
        +  "description": "the post's angle — a list_hooks id or your own wording, reused exactly",
        +  "type": "string"
        +}
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "any stable string: a repeat within 24h returns the original post instead of posting again",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
      • addedInput schema / properties / subject
        Added value: +{
        +  "description": "what the post is about",
        +  "type": "string"
        +}
    • Changedpost_to_google_business2 fields changed
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
    • Changedpost_to_linkedin2 fields changed
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
    • Changedpost_to_linkedin_page2 fields changed
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
    • Changedpost_to_meta2 fields changed
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
    • Changedpost_to_pinterest2 fields changed
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
    • Changedpost_to_telegram6 fields changed
      • addedInput schema / properties / allowDuplicate
        Added value: +{
        +  "description": "post it even though an identical post was just made",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / hook
        Added value: +{
        +  "description": "the post's angle — a list_hooks id or your own wording, reused exactly",
        +  "type": "string"
        +}
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "any stable string: a repeat within 24h returns the original post instead of posting again",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
      • addedInput schema / properties / subject
        Added value: +{
        +  "description": "what the post is about",
        +  "type": "string"
        +}
    • Changedpost_to_tiktok2 fields changed
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
    • Changedpost_to_x2 fields changed
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
    • Changedpost_to_youtube2 fields changed
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
    • Changedpost_x_article2 fields changed
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
    • Changedreschedule_post2 fields changed
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
    • Changedschedule_post2 fields changed
      • addedInput schema / properties / ideaId
        Added value: +{
        +  "description": "short id of the content-plan idea this post came from",
        +  "type": "string"
        +}
      • addedInput schema / properties / recipe
        Added value: +{
        +  "description": "the post's FORMAT id, e.g. \"slideshow\" or \"imessage_chat\" — post_performance groups by it, so reuse one id per format",
        +  "type": "string"
        +}
  14. 1 tool update
    • Changedgenerate_image1 field changed
      • changedInput schema / properties / aspectRatio / description
        Previous value: -"e.g. '1:1', '9:16', '16:9'"New value: +"e.g. '1:1', '9:16', '16:9', '4:5'. Each model draws its own list (hermoso_capabilities prints it per model, e.g. Nano Banana 2 goes to 1:8 and 8:1); a ratio the chosen model cannot draw is refused before anything is charged"
  15. 1 tool update
    • Changedsave_creator3 fields changed
      • changedInput schema / properties / image / description
        Previous value: -"public https url of the portrait (an existing render’s url, or any public photo). Not a local file path — upload it with upload_file first and save the url that returns"New value: +"REQUIRED except with useAnyway. public https url of the portrait (an existing render’s url, or any public photo). Not a local file path — upload it with upload_file first and save the url that returns"
      • addedInput schema / properties / useAnyway
        Added value: +{
        +  "description": "only for a creator whose saved photo was flagged too unclear to cast (render_ad says so): true casts the current photo as it is, no new image needed",
        +  "type": "boolean"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "image"
        -]New value: +[
        +  "name"
        +]
  16. 1 tool update
    • Changedplan_ad1 field changed
      • addedInput schema / properties / draft
        Added value: +{
        +  "description": "ONLY after a video refusal that offered a light draft: the {model, durationSeconds} it named. The plan is then authored to that length and priced on that model. Never invent one — a video the account cannot cover is refused BEFORE planning with the three options (image / add credits / this draft when one fits), and the user chooses.",
        +  "properties": {
        +    "durationSeconds": {
        +      "type": "number"
        +    },
        +    "model": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "model",
        +    "durationSeconds"
        +  ],
        +  "type": "object"
        +}
  17. 1 tool update
    • Changedrender_ad1 field changed
      • changedInput schema / properties / creator / description
        Previous value: -"CAST A SAVED CREATOR in this ad — their id from list_creators, or the name you know them by (“Sarah”). Their saved portrait becomes the on-camera identity for the whole spot, so the same face carries across every act and across every ad you render for this brand — and because we already have their picture, the character portrait this pipeline would otherwise generate is skipped, so casting somebody costs LESS than not casting them. Omit to let the ad cast a fresh person. Refused for free, with nothing rendered, if the name matches nobody or more than one creator, if the plan has nobody on camera, or if they are a REAL person with no likeness consent on file."New value: +"CAST A SAVED CREATOR in this ad — their id from list_creators, or the name you know them by (“Sarah”). Their saved portrait becomes the on-camera identity for the whole spot, so the same face carries across every act and across every ad you render for this brand — and because we already have their picture, the character portrait this pipeline would otherwise generate is skipped, so casting somebody costs LESS than not casting them. Omit to let the ad cast a fresh person — EXCEPT for a CREATOR account (onboarded from their own @handle): their own saved likeness is cast by default on any plan with a person on camera, and the read-back says `default:true`; pass \"none\" to render without them. Refused for free, with nothing rendered, if the name matches nobody or more than one creator, if an explicitly named creator is cast on a plan with nobody on camera, or if they are a REAL person with no likeness consent on file."

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.