Tools

media

Media

MCP tool

Images and videos for posts: make new ones with AI, on brand, or register ones that exist.

Actions

generate_image

generate_image prompt platform [logo] [reference_media_ids] [brand]

Make an image (OpenAI GPT Image) for one platform. platform sets its exact size (a LinkedIn post is 1080×1350, a Story 1080×1920, a YouTube thumbnail 1280×720…), keeps words and faces clear of the platform's own buttons and captions, and adds what works there (LinkedIn: credible, one idea, a short headline; Instagram: visual first, little text; TikTok: native, not an ad; X: bold and readable small). A post going to several channels gets one image per channel, each attached to its own variant. Write the prompt like an art director: subject, setting, composition, light, style and mood; put any words that must appear in the image in quotes, and keep them short. The brand profile (palette, type, feel, audience) is added for you unless brand=false. logo=true puts the company's real logo file in a corner clear of the platform's interface (leave it off a still you'll turn into a video). reference_media_ids are library images to work from: a product shot, a person, an avatar, or an earlier image to edit ("same image, warmer light"). About 40 seconds. Returns media_id.

RESTPOST/media/images·CLItracee media generate-image

generate_video

generate_video prompt platform [duration] [first_frame_media_id] [audio]

Make a short clip with sound (Google Veo) for one platform: vertical 1080×1920 for TikTok, Reels, Shorts, Stories and LinkedIn; landscape 1920×1080 for YouTube and X; with that platform's pacing and safe zones. Describe one continuous shot: subject, action, camera move, light, sound. Video models can't write text: leave words out. For the most on-brand clip, make an image of the opening shot first for the same platform and pass it as first_frame_media_id. One to three minutes; if it isn't done when the call returns, call action=status.

RESTPOST/media/videos·CLItracee media generate-video

status

status generation_id

Wait for a generation; returns its media_id once done.

RESTGET/media/generations/{generation_id}·CLItracee media generation <generation_id>

add

add url=<https URL> (or urls=[…] for up to 20 at once, each answered on its own) [alt_text]

Add an image or video from the web (for example one found with web action=images). Images are copied into the library and converted to a format every network takes (AVIF, WebP and SVG become PNG or JPG); videos are linked. Returns its media_id.

RESTPOST/media/from-url·CLItracee media from-url

RESTPOST/media/from-urls·CLItracee media add-many

list

list [query] [kind] [limit]

The media library, newest first: uploads, AI images and videos, designs, imports. query searches names and descriptions; kind=image|video. Each shows how many posts use it.

RESTGET/media/library·CLItracee media library

describe

describe media_id [name] [alt_text]

Rename a file or set its alt text (what screen readers say; networks that take it get it with the post).

RESTPATCH/media/{media_id}·CLItracee media describe <media_id>

clip

clip url=<link to the video> (or media_id=<a video in the library>) [clip_length] [layout] [captions] [caption_style]

Turn a long video (a talk, webinar, podcast, interview; up to 2 hours, 1 GB) into up to 12 vertical 1080×1920 clips. Every stretch of the transcript is scored on whether its first 2 seconds would stop a cold viewer; the best become clips, each with a viral score (0-100), a hook line over its first 5 seconds, word-by-word captions, and ready-made TikTok and Instagram descriptions and a YouTube Shorts title. Each shot is framed on its own: the camera follows the speaker, two people in one shot are stacked with the captions between them, screen recordings stay readable. url takes a video's page on YouTube (videos, Shorts, finished lives), Vimeo, TikTok, Instagram reels, Facebook, X, LinkedIn, Twitch (past broadcasts, clips), Dailymotion, Loom, Reddit, Streamable, Wistia, Vidyard, Rumble, Kick, Bilibili, TED or Bluesky; a Google Drive, Dropbox, OneDrive/SharePoint or Box share link (shared with anyone who has the link); or a direct https link to a video file. A private, members-only or sign-in-only video can't be fetched: then ask the person to upload the file on the Clips page (/clips). Runs in the background for a few minutes; returns job_id at once.

RESTPOST/clips·CLItracee clips create

clip_status

clip_status job_id

Wait for a clipping job (up to about 45 seconds) and see its stage and progress; once done, each clip's clip_id, media_id, score, hook, title, copy and what's said in it, best first. Without job_id: the recent clipping jobs. Attach a clip to a post with posts action=draft variants[].media_ids=[media_id], starting from its copy.

RESTGET/clips·CLItracee clips list

RESTGET/clips/{job_id}·CLItracee clips get <job_id>

clip_edit

clip_edit job_id clip_id [start] [end] [hook] [captions] [caption_style] [effects=auto|none]

Make one clip again: trim it (start and end in seconds of the source video, within a few seconds of the original cut), change the hook line (empty removes it), the captions, or let a model add zooms, colour pops, black-and-white moments and flashes on the right words. Takes under a minute in the background; clip_status shows the new media_id when done.

RESTPATCH/clips/{job_id}/clips/{clip_id}·CLItracee clips edit <job_id> <clip_id>

clip_dub

clip_dub job_id clip_id language [voice]

Dub one clip into another language (es, pt, fr, de, it, ja, hi…): translated, spoken by an ElevenLabs voice in the original timing, with captions and the hook in that language. A new video next to the clip (clip_status shows it under dubs).

RESTPOST/clips/{job_id}/clips/{clip_id}/dubs·CLItracee clips dub <job_id> <clip_id>

clip_youtube

clip_youtube job_id [title]

Package the long video for YouTube: without title, ten titles (best first, each with words for its thumbnail; two recommended); with title, a description with chapters and three thumbnails (the presenter from the video, the headline burned in), as media.

RESTPOST/clips/{job_id}/youtube·CLItracee clips youtube <job_id>

ai_actor

ai_actor (url=<product page> and/or prompt=<what it is>) [language] [style] [gender] [voice]

A 20-25 second vertical ad with an AI actor talking about the product: three scripts are written (hook, problem, solution, demo, call to action), the first is cast, voiced (ElevenLabs) and lip-synced (HeyGen), with b-roll, captions and the hook. About 5 minutes and about $1.50; returns ai_video_id. action=ai_actor_status ai_video_id (as job_id): where it is, and the media_id when done.

RESTPOST/ai-actor-videos·CLItracee clips ai-actor

browse_app_files

browse_app_files app [folder_id] [query] [cursor]

The files in a connected app — googledrive, dropbox, one_drive, box, canva, figma (pictures and videos) or googledocs, googledrive, notion, confluence (docs). Without folder_id it lists the top folder; query searches by name across the app (find a folder by its name, then pass its id as folder_id). Each item has id, name and kind (folder, image, video, doc, design, frame). figma has no file list: pass a Figma file link as folder_id to see its frames. An app that isn't connected says so: send the person to Connections.

RESTGET/media/apps/{app}/files·CLItracee media app-files <app>

import_from_app

import_from_app app file_ids=[…] (up to 20)

Bring pictures and videos (or Canva designs and Figma frames, as PNG) into the media library like an upload; returns each file's media_ids for posts action=draft variants[].media_ids. A file brought in before isn't copied again. Pictures up to 15 MB, videos up to 100 MB (MP4, MOV, WebM); for a longer video, clip it with action=clip after importing, or have the person pick it on the Clips page.

RESTPOST/media/apps/{app}/import·CLItracee media import-from-app <app>

read_app_doc

read_app_doc app doc_id

A doc's text (googledocs, a Google Doc or text file in googledrive, notion, confluence), to write posts from or to update the brand with brand action=update. When someone names a doc by its title, find it first with browse_app_files query=<title>.

RESTGET/media/apps/{app}/docs/{doc_id}·CLItracee media read-doc <app> <doc_id>

Attach media to a post with posts action=draft (or update) variants[].media_ids.

Inputs

Every call takes action and the fields that action names above.

  • actionstringrequired

    What to do: generate_image, generate_video, status, add, list, clip, clip_status, clip_edit, clip_dub, clip_youtube, ai_actor, ai_actor_status, describe, browse_app_files, import_from_app or read_app_doc. Each is described in the tool description.

    Available options:generate_imagegenerate_videostatusaddlistclipclip_statusclip_editclip_dubclip_youtube

  • promptstring

    For generate_image and generate_video

    3–4,000 characters

  • platformstring

    For generate_image and generate_video: where it will be posted. The channel's platform (linkedin, instagram, facebook, x, threads, tiktok, youtube, pinterest, reddit, google_business, devto, hashnode) or a placement: instagram_story, facebook_story, youtube_short. youtube alone is a thumbnail (image) or a landscape video

    Available options:linkedininstagraminstagram_storyfacebookfacebook_storyxthreadstiktokyoutubeyoutube_short

  • aspect_ratiostring

    Only without platform: 1:1 square (default for images), 4:5 portrait, 9:16 vertical (default for video), 16:9 landscape

    Available options:1:14:53:49:1616:9

  • logoboolean

    generate_image: put the brand's real logo in the bottom-right corner

  • reference_media_idsstring[]

    generate_image: library images to work from, from action=list

    up to 6 itemseach uuid

  • brandboolean

    Follow the brand profile; default true. false for an off-brand image

  • durationinteger

    generate_video: seconds, default 8

    2–15

  • first_frame_media_idstring

    generate_video: an image to start from and bring to life. From media action=generate_image.

    uuid

  • audioboolean

    generate_video: with sound; default true

  • generation_idstring

    For status. From media action=generate_image or generate_video.

    uuid

  • urlstring

    For add; for clip, a link to the video (YouTube, Vimeo, TikTok, Instagram, X, LinkedIn, Loom…, a Google Drive/Dropbox/OneDrive/Box share link, or a direct file link)

    uri

  • urlsstring[]

    add: several images or videos at once; each gets its own media_id or error

    1–20 itemseach uri

  • media_idstring

    clip: a video already in the library; describe: the file to change. From media action=list (or the media_id media action=add / generate_image returns).

    uuid

  • job_idstring

    For clip_status, from action=clip (leave out to list recent jobs); for clip_edit, the clip's job

    uuid

  • clip_idstring

    clip_edit: the clip, from clip_status. From media action=clip_status job_id=<job_id>.

    uuid

  • clip_lengthstring

    clip: auto 15-60s (default), short 15-30s, medium 30-60s, long 60-90s

    Available options:autoshortmediumlong

  • layoutstring

    clip: auto (default, picked per shot), track (follow the speaker), split (stack two speakers), fit (whole frame over blur)

    Available options:autotracksplitfit

  • captionsboolean

    clip, clip_edit: burn captions in; default true

  • caption_stylestring

    clip, clip_edit: the caption look

    Available options:defaulthormozipilllimeonewordcleanglowbeast

  • hookstring

    clip_edit: the line over the first 5 seconds; empty string removes it

    up to 120 characters

  • startnumber

    clip_edit: new start, seconds into the source video

  • endnumber

    clip_edit: new end, seconds into the source video

  • effectsstring

    clip_edit: auto lets a model place zooms, colour pops and flashes; none removes them

    Available options:autonone

  • languagestring

    clip_dub: ISO 639-1 code (es, pt, fr, de…); ai_actor: the script's language

    2–5 characters

  • voicestring

    clip_dub, ai_actor: an ElevenLabs voice id (default by gender)

    up to 40 characters

  • titlestring

    clip_youtube: the title to write the description and thumbnails for

    up to 200 characters

  • genderstring

    ai_actor: the actor

    Available options:femalemale

  • stylestring

    ai_actor: the script's style; default ugc

    Available options:ugceducationalshockstorycomparison

  • namestring

    describe: the file's new name

    up to 120 characters

  • alt_textstring

    For describe and add: the alt text.

    up to 1,000 characters

  • querystring

    list: search names and descriptions

    up to 100 characters

  • kindstring

    list: only images or videos

    Available options:imagevideo

  • limitinteger

    For list: the limit.

    1–100

  • appstring

    browse_app_files, import_from_app, read_app_doc: the connected app

    Available options:googledrivedropboxone_driveboxcanvafigmagoogledocsnotionconfluence

  • folder_idstring

    browse_app_files: a folder's id from an earlier browse (figma: a file link). From media action=browse_app_files (an item with kind=folder).

    up to 500 characters

  • file_idsstring[]

    import_from_app: ids from browse_app_files. From media action=browse_app_files (items[].id).

    1–20 itemseach 1–500 characters

  • doc_idstring

    read_app_doc: the doc's id from browse_app_files. From media action=browse_app_files (an item with kind=doc).

    up to 500 characters

  • cursorstring

    browse_app_files: next_cursor from the last page

    up to 4,000 characters