SuperCMO

io.github.SupercmoHQPublished by GitHub account SupercmoHQv0.1.27Updated Oct 30, 2026

Marketing media generation — image, video, voice — for AI agents. BYO keys.

Overview

AI-generated overview

Generates marketing images, videos and voiceovers from a brief, plus social ad research, transcription and a posting calendar.

What you can do
  • Generate and list models for images, videos and speech, with voice selection and pending-job polling
  • Analyze images and videos, transcribe audio with word timestamps, and extract structured data from product or store URLs
  • Research public social and ad-library data: competitor ads, profiles, posts, comments, hashtag search and trends
  • Edit locally with ffmpeg: stitch clips, burn styled captions, add logos, timed text and end cards
  • Schedule, list, update and cancel calendar events, including recurring tasks and prepared posts
  • Check which vendor keys are configured and which capabilities are ready
When to use it
Useful for marketers and small teams who want an assistant to plan and produce ad creatives, UGC-style videos, product photos and voiceovers end to end, or to audit competitor ads and schedule posts. Also handy for one-off media tasks such as transcription, captioning and stitching clips.
Requirements
Runs locally over stdio as a Python package fetched via uvx, so uv must be on PATH. Generation needs either a managed SuperCMO sign-in with paid credits, or your own vendor keys in ~/.supercmo/.env or the host env block: WAVESPEED_API_KEY or FAL_KEY for image and video, and optionally ELEVENLABS_API_KEY, GEMINI_API_KEY, FIRECRAWL_API_KEY and SCRAPECREATORS_API_KEY. Local ffmpeg for stitching and captioning.
Before you install
Generation calls cost money: vendor keys bill your own accounts, and the managed option bills SuperCMO credits. Several secret keys are read from the environment or a local env file. Calendar events can re-invoke the agent or publish prepared content to connected accounts, and social research pulls public platform data. Anonymous usage telemetry is on by default and can be disabled with SUPERCMO_TELEMETRY=false or DO_NOT_TRACK=1.

Installation

In SourceWeft

  1. Open SuperCMO in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[SuperCMO]

SuperCMO Skills

Enable AI agents to create marketing videos and images

Open-source skills that empower any AI agent (Claude, Cursor, Codex, Hermes, etc.) to generate end-to-end marketing campaigns - UGC videos, ad videos, product photography and more.

Just provide a product photo and a brief. The agent extracts the product details, selects the optimal AI image and video models, casts AI actors, and edits the generated content into finished, campaign-ready assets. It can produce videos of any length while maintaining perfect actor and product consistency.

The open-source alternative to closed AI marketing agents.

[License: Apache-2.0] [CI]

Install in one command — into Claude Code, Cursor and Codex, whichever you have (needs uv):

bash
npx --yes @supercmo/[email protected] --all

For Cursor, run it in your project with --cursor --project-dir . so the skills land there too.

Then ask your agent to "set me up": bring your own model keys, or sign in and pay per use with SuperCMO's. If the skills are useful to you, a ⭐ helps other people find them.

UGC video

create an ugc video for this tshirt. it should be a get ready with me reel. snappy. very genz. [product-photo]

Cartoon video ad

create a cartoon video ad in stylized 3D style, promoting my tumbler. make it fun and entertaining. [product-photo]

Product ad video

make me an ad video for this energy drink [product-photo]


Contents


See how it works

A full production studio inside Claude. You provide a product photo and a high level (or detailed) brief.

The AI agent then plans the video → writes the script → generates the AI actor → creates storyboards → generates the video clips → stitches them together, and delivers the final video.

The best part? You stay in charge all along.


Quick start

Paste this to your coding agent (Cursor, Codex, …):

Run `npx --yes @supercmo/[email protected] --all`. Once it's installed, run the supercmo-setup skill to complete the setup.

Prefer to run it yourself:

bash
npx --yes @supercmo/[email protected] --all   # every detected host

Run the supercmo-setup skill or ask your agent to "set me up".

Prefer a preview before spending? Every generation supports dry_run — the exact request, no API call.


Hosted SuperCMO

Rather not set anything up? SuperCMO runs these same skills for you, in the browser:

  • No setup — sign in and start; nothing to install, no keys to manage.
  • A workspace per brand — a private sandbox where the agent runs code and keeps your files.
  • Publishing — connect your accounts, approve a post, and it goes out to Instagram (Business account), a Facebook Page, LinkedIn (your profile), YouTube or Reddit.
  • A calendar — your scheduled posts and recurring tasks in one place, to edit or cancel.

Try SuperCMO →


Start from a product photo

Starting from your product is faster than describing a video from a blank prompt.

Hand SuperCMO a single product photo and it builds a UGC ad around it - a creator on camera reviewing, unboxing, trying on, or demoing your product:

  1. Upload a product photo and give a short brief
  2. It analyzes the product, picks the format, casts the creator, and writes the script. Then shows you the concept and waits for your approval before spending a cent
  3. Once approved, it generates the storyboards, renders each clip, stitches them together, and hands back the finished video
text
"Make a 30-second unboxing UGC ad for this product." [attach product photo]

What you get back is not a random clip. You get:

  • You stay in charge - approve the creator, the concept, and the script before anything renders, and change any part along the way.
  • Consistency built in - maintains the same actor and product across every clip, through the storyboard and anchor references
  • A finished, scroll-stopping video - delivered at the length you asked for, ready to post

Works inside Claude Code, Cursor, Codex, Hermes - any agent that supports the Agent Skills spec.


Why SuperCMO Skills?

You direct, it producesSuperCMO doesn't decide what your campaign should say — you do. It handles the production work underneath: scripting to your brief, casting, shooting, editing. It checks in at every step, so you can redirect it mid-run instead of accepting whatever comes out the end.
No tool hoppingMaking one video ad today means jumping between tools: script in one, images in another, voice in a third, video in a fourth, then stitching it in an editor. SuperCMO does it all from a single brief, in one place.
The right model, picked for youEvery AI image/video model works differently and needs different prompting. Knowing that Veo wants one kind of prompt and Kling another — and which to reach for in the first place — is most of the work. SuperCMO's skills already know. You write the brief; it handles the rest.
Consistency across every shotOne good clip is easy. Ten clips where the product and the face stay identical is the part that breaks. SuperCMO storyboards before it renders and locks a reference into every generation, so continuity holds across the whole cut.
Editing includedIt doesn't just hand back a raw 10-second clip. It generates the media, splits long clips, trims footage, adds voiceover, and stitches everything into a finished asset.
Pay per use, no subscriptionMost marketing tools charge monthly whether you use them or not. SuperCMO doesn't — bring your own vendor keys (free), or generate on SuperCMO's keys and pay per use. No lock-in.
Runs where you already workInside Claude Code, Cursor, OpenAI Codex, Hermes, Openclaw, or any agent that supports the Agent Skills spec. Your keys and files stay on your machine.

How the skills work together

You act as the creative director, and your agent uses SuperCMO skills to orchestrate the entire production pipeline.

Here is an example of how the skills chain together behind the scenes to execute a complex brief like: "Make a 1-minute video ad for this product [URL] with a voiceover."

text
[Brief] "Make a 1-minute video ad for this product [URL] with a voiceover."   │   ├── 1. Analyze ──> Scrapes the URL to understand the product and fetch product images.   │   ├── 2. Plan    ──> Breaks the 60s brief into four 15-second shots.   │                  Writes the script and shot list.   │   ├── 3. Image  ──> Generates master reference images of the product    │                 using the best image models.   │   ├── 4. Video  ──> Generates the 4 video clips. Locks the anchor reference    │                  into every shot so the product doesn't shape-shift.   │   ├── 5. Audio   ──> Adds a voiceover, budgeting the script to match the    │                  exact length of the video.   │   └── 6. Stitch  ──> Stitches the finished clips together to create one                       continuous 1-minute video file.

The Marketing Production Pipeline

SuperCMO installs a full creative agency into your text-based agent. It doesn't just generate media; it orchestrates the specific steps required to make high-converting ads:

  • Product Analysis - Scrapes your URLs to extract brand guidelines, materials, and features so the AI models don't hallucinate your product.
  • Ad Copy & Scripting - Breaks the brief into a shot-by-shot ad script tailored for platforms like Meta, TikTok, or YouTube.
  • Visual Generation - Produces master reference images and locks them as anchors so your product looks consistent in every video frame.
  • Audio & Voiceover - Generates natural, high-energy voiceovers paced perfectly to your video duration.
  • Post-Production - Trims footage, syncs audio, and stitches the final MP4.

These are the discrete skills installed into your agent to run that pipeline:

SkillDescription
generating-ugc-videosProduces UGC videos of any length - like review, unboxing, try-on, tutorial and more. It casts the actor, writes the script, and storyboards multiple clips to lock in actor and product consistency. It lets you direct every step to get a cohesive, ready-to-run ad in minutes.
generating-ad-videosProduces a polished, cinematic product commercial in your brand's voice — a no-actor product showcase or an actor-led story ad, at any length. It storyboards every clip to hold your real product identical across cuts, writes the voiceover and casts the actor when the ad calls for one, then stitches it into one ready-to-run spot you approve step by step before anything expensive renders.
generating-cartoon-videosProduces a drawn, animated video for your product — cartoon, anime, illustrated or painted, at any length. Your product either stays exactly as photographed or is drawn into the style, and a cast of characters carries the story around it. It settles one art style, writes the story, draws your cast once so every cut is the same cast, then films it clip by clip and lays a voiceover over the top — with your approval before anything expensive renders.
cloning-video-adsRecreates a video ad you admire with your own product. It watches the reference ad, works out the shots, pacing, camera and voiceover that make it work, then rebuilds the same structure around your product — swapping the product, brand and spoken lines for yours while holding the original's craft. You approve the plan before anything expensive renders, and it comes back as one finished clip.
generating-image-adsProduces a scroll-stopping image ads for your product — one image, or a set in every placement ratio your feed needs. It keeps your real product and your brand identity perfectly consistent across every frame, and shapes the offer and claims you give it into a well designed ad, following industry best practices.
generating-product-photosDirects a commercial photoshoot around your product, automatically applying the correct lighting, framing, camera angles and props to deliver studio-quality product shots across 10+ formats.
researching-competitor-adsAnalyzes what your competitors are advertising and shows you what is actually working — the ads that have run longest, the ones they quietly dropped, and what the winners have in common. A vision model watches the image and video ads that carry the signal — the long-runners, the ones just launched, the ones they dropped — the whole way through. So you learn how each one is built: the hook, the pacing, when the product lands, the proof and the offer. You also get the angles nobody in your category has taken.
analyzing-own-adsAudits your own advertising the way you would a competitor's — pulling every ad you run from the public library and watching the creative the whole way through. You get the map of what you already cover: which angles, hooks and formats you run, which ads have held longest, what you quietly stopped and how fast, and which winners are still carrying the account with nothing newer built beside them.
planning-campaignsDecides what your next ads should be. It reads your brand, your product, the ads you already run and what competitors are doing, then writes concepts ranked by what is worth testing — each a full description of one ad, the buyer it targets and the bet it tests, with the proof it rests on and the skill that would build it. Approve the plan and it builds the concepts you pick, one by one, through the specialist skills.
onboarding-userSets your brand up from one link. Give it your website and it works out who you are — your voice, your audience, what you sell — finds who you compete with, and writes both where every future session will find them.
supercmo-setupGets you from installed to generating in a few simple steps
adapting-formatsTakes an ad you already have and remakes it in every other size you need it in. It reads your ad first, works out what has to move and what fills the space the new shape opens up, and shows you that plan before it spends anything — then rebuilds each shape around the original so your product, palette and wording stay recognisably the same rather than being stretched, cropped or letterboxed into a mess.
analyzing-brandWorks out your brand from your website — your colours, fonts and logo, how you sound, who you sell to, what you sell, and the claims you stand behind. Anything your site doesn't actually say is written down as unconfirmed rather than invented, so the skills that plan and make your ads work from your real brand.
analyzing-productsAnalyzes an e-commerce link or photo to map out your product's exact physical mechanics and extract clean reference images, building a highly accurate creative brief without any manual research or extraction.
generating-ai-actorsCasts a distinct, demographic-specific AI actor as a reusable identity reference, allowing you to reliably feature the exact same brand face across an entire multi-asset image and video campaign.
generating-audioConverts scripts into audio. Lets you preview voice candidates from top models before generating. It then formats your script's numbers, dates, and URLs so the chosen AI model pronounces them accurately.
generating-imagesRoutes your brief to the best of 10+ SOTA image models (like Nano Banana, GPT Image), writes detailed prompts as per model specifications and generates multiple variations instantly.
generating-storyboardsDraws out your entire video concept clip-by-clip as static images, enforcing strict character and product continuity so you can approve camera angles and visual flow before committing to expensive video renders.
generating-videosRoutes your brief to the best of 10+ SOTA video models (like Veo, Seedance), writes detailed prompts as per model specifications and generates multi-clip stories that hold continuity across cuts, stitched into one file.
identifying-competitorsFinds who a brand competes with: searches the web for the alternatives buyers compare it against, proposes a shortlist with a source per name, and confirms the real ones for other skills to build on.
writing-ad-copyWrites the text that runs alongside your ad — headline, primary text, description and call to action — tuned to the fields and best practices of each platform it runs on: Facebook and Instagram, Google Search, LinkedIn, TikTok, X and Reddit. It works one angle several ways and sizes each field so nothing gets cut off in the feed.
writing-video-promptsTranslates your scenes into the highly specific, detailed instructions that different video models require. It times the camera motion and steers around known AI rendering limits to match your exact visual brief.
writing-video-scriptsDrafts spoken scripts built around proven opening hooks designed specifically to stop the scroll. It sizes the text to fit your exact runtime and paces words across natural breath points for human delivery.

Install

Every host loads the same skills + the same local MCP server - only the wiring differs. Prerequisite: uv on PATH — the MCP server runs via uvx, which provisions Python and the server for you (nothing to pip install). The root pyproject.toml / package.json are packaging scaffolding — you don't build anything by hand to run or contribute to the skills.

npx installer - registers the MCP server via each host's own mechanism (codex/claude mcp add where a CLI exists; a .cursor/mcp.json for Cursor) and places the skills. One command does every detected host:

bash
npx --yes @supercmo/[email protected] --claude               # Claude Codenpx --yes @supercmo/[email protected] --cursor --project-dir .  # Cursor (per project)npx --yes @supercmo/[email protected] --codex                # Codexnpx --yes @supercmo/[email protected] --all                  # every detected host

If the SuperCMO tools don't show up in your agent afterward, restart it once.

Claude Code plugin - an alternative to npx … --claude (use one, not both): the whole repo installs as one plugin, managed by Claude Code:

/plugin marketplace add SupercmoHQ/superCMO-skills/plugin install supercmo@superCMO-skills

Codex plugin - an alternative to npx … --codex (use one, not both): installs the skills + MCP server as one plugin, managed by Codex:

bash
codex plugin marketplace add SupercmoHQ/superCMO-skillscodex plugin add supercmo@superCMO-skills

Claude Cowork / Claude desktop - download supercmo-plugin.zip from the latest release, then Settings → Plugins → Upload local plugin.

Found us on skills.sh? npx [email protected] add SupercmoHQ/superCMO-skills copies the skills but not the MCP server they call — so image_generate/video_generate won't exist yet. Install the server, then reload your agent:

bash
npx --yes @supercmo/[email protected] --all   # or --cursor --project-dir . · --codex · --all

Set up a key

Generation needs a key. Two ways — pick one:

Option A · Managed — one command

Generate on SuperCMO's keys, pay per use — no vendor signups, nothing to paste.

bash
npx --yes @supercmo/[email protected] login

Opens SuperCMO in your browser to sign in and authorize this device; the key is written to ~/.supercmo/.env automatically. Buy credits in the web app when you're ready.

Option B · Bring your own keys — free

Bring your own vendor keys — requests go directly to the model vendor; nothing routes through SuperCMO.

One file, every host. The installer creates ~/.supercmo/.env; the MCP server loads your keys from there on any host (Claude Code, Cursor, Codex, …). Open it and add a key:

bash
# ~/.supercmo/.envWAVESPEED_API_KEY=your-key # image + video (start here) — https://wavespeed.aiFAL_KEY=                   # image + video (alternative) — https://fal.aiELEVENLABS_API_KEY=        # voiceover (optional)        — https://elevenlabs.ioGEMINI_API_KEY=            # image/video analysis (opt.) — https://aistudio.google.comFIRECRAWL_API_KEY=         # url extraction (optional)   — https://firecrawl.dev
  • One key to start: WAVESPEED_API_KEY covers image + video and is what we recommend — users report better reliability there. FAL_KEY is fully supported too and serves the same models, so use it if that's the account you already have. With both set, WaveSpeed is used; SUPERCMO_MEDIA_PROVIDER=fal picks the other. The rest are optional — add one when you want that capability (voiceover, analysis, extraction).
  • Prefer environment variables? Exporting the key (or putting it in your host's MCP config env block) also works and takes precedence — ~/.supercmo/.env is just the reliable default that also works for GUI-launched hosts that don't inherit your shell.
  • Check what's set: ask your agent to run the setup_status tool (host-agnostic, no path needed).

Security & trust

These skills run inside your agent. Exactly what happens:

  • Open source & inspectable. Every skill, script, and the MCP server lives in this repo under Apache-2.0 — read, diff, or pin before you run it.
  • Your keys stay local (BYOK). With your own vendor keys, they live in ~/.supercmo/.env (or your host's MCP config env / your shell); the server reads them from its process environment and requests go directly to the vendor — nothing routes through SuperCMO. With the managed key, requests go to SuperCMO's proxy (billed to your credits) — you never hand us a vendor key.
  • The MCP server is local + minimal. A stdlib-only Python package (supercmo-skills on PyPI, source in scripts/supercmo_skills/mcp/), fetched and run on demand via uvx supercmo-skills@<version> — it runs on your machine, launched by your host, and starts only when your host enables the plugin.
  • Dry-run everything. Generation tools support dry_run - a free preview of the exact request (keys masked), no API call.

Found something off? Open an issue.

Telemetry

SuperCMO sends anonymous, opt-out usage counts from the MCP server so we can see which tools get used and prioritize. Full details in TELEMETRY.md.

  • What we send: the tool name, whether it succeeded, how long it took, the model and provider, whether it used your own key or SuperCMO's, an error code if it failed, versions (OS / Python / SuperCMO), and a random install id. The full list is in TELEMETRY.md.
  • What we NEVER send: your prompts, tool arguments, generated media, file paths, keys, hostname, username, or IP address.
  • Turn it off (any one): SUPERCMO_TELEMETRY=false, DO_NOT_TRACK=1, or DISABLE_TELEMETRY=1. It also honors Claude Code's CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC.
  • See what would be sent: run with SUPERCMO_TELEMETRY=log - prints each payload instead of sending.
  • Events go to our own endpoint (api.getsupercmo.ai), never a third-party analytics host. The random install id is never linked to any account.

Community

Questions, ideas, or something you built? Open an issue or discussion. Kshitiz (@kshitizkgp) reads every new issue and replies within one working day.

Contributing

New skills and improvements welcome - see CONTRIBUTING.md. In short:

  1. Create skills/<your-skill>/ (folder name = the name in frontmatter), using skills/generating-images/ as the reference layout.
  2. Keep SKILL.md short; push detail into references/, deterministic work into scripts/ (stdlib-only where possible, BYO-keys from env, --dry-run on anything that mutates).
  3. Validate - CI runs the same on every PR:
bash
python3 scripts/quick_validate.py       # structural + strict-YAML frontmatter (blocking)python3 scripts/listing_gate.py         # scripts compile + --dry-run gates (blocking)python3 scripts/check_shared_client.py  # no raw vendor HTTP - the brokering seam (blocking)python3 scripts/check_catalog_sync.py   # provider-key catalog single-sourced (blocking)

License

Apache-2.0 - see LICENSE and NOTICE.

The skill files, scripts, and MCP server in this repository are Apache-2.0. The hosted SuperCMO product (getsupercmo.ai) is a separate service governed by its own terms.

If SuperCMO saved you time, a ⭐ helps others find it.

Built by SuperCMO · Report an issue

Source: README.md at commit 3bf78a4

Tools

22

setup_status

Check which SuperCMO media-generation keys are configured and which capabilities (image / video / audio) are ready — the setup doctor. Call this FIRST when a user is setting up SuperCMO, asks which keys they need, or a generation failed with 'no_provider_configured'. Returns each vendor key (set/missing, what it enables, where to get it), managed-key state, and per-capability readiness. Set check=true for a FREE key-validity probe where one exists (never a paid generation). Reports only key NAMES and set/missing — never key values.

Parameterscheck

image_generate

For a user's image request, load the `generating-images` skill BEFORE calling this — it picks the right model and builds the prompt (this tool does neither, and calling it raw gives weak, inconsistent results). Generate one or many still images from text prompts, optionally guided by reference images (a product photo, a character, a style or composition to follow). Pass `requests`: ONE object per image (wrap even a single image — `{ requests: [ { prompt } ] }`). Generate a batch of DIFFERENT images in a SINGLE call by adding more request objects (up to 10), each with its own prompt/model/aspect_ratio/resolution/reference_images; a single approval covers the whole batch. Each result carries a hosted image URL plus a local file `path`, or a structured error with a hint. Use for graphics, mockups, product/marketing visuals, logos, concept art, or to render a product or character from a supplied reference. Images are polled for you; a heavy image (large model / 4k / big batch) that runs long returns `{status:"pending", ...}` (a job handle, not an error) — pass that exact handle to `job_status` to retrieve it, and never re-submit a pending image. Set dry_run=true to preview the exact requests without generating (no credits spent).Each entry in `results` is one of three things: finished media; a `{status:"pending", ...}` job handle to rejoin with job_status; or a failure carrying `ok: false` and an `error`. A failed entry is terminal — report its `error` and never poll or re-submit it. Read every entry rather than the top-level counters alone.

Parametersdry_runrequestsrequired

list_image_models

List the available image-generation models (with strengths, price, the aspect ratios each accepts and how many reference images it takes), plus the valid aspect ratios and resolution tiers that image_generate accepts. Use when you need to choose a model and don't already have one in mind (e.g. an open-ended request), or to check the valid aspect_ratio / resolution values, or how many reference images a model will take, before calling image_generate — most of the time the model is the default or already specified. Pass an optional 'query' to filter models by use-case keyword (e.g. 'text', 'photorealistic', 'fast').

Parametersquery

video_generate

For a user's video request, load the `generating-videos` skill BEFORE calling this — it picks the right model and builds the motion prompt (this tool does neither, and calling it raw gives weak, generic clips). Generate one or many short video clips from text prompts, optionally guided by a start (and end) frame or by reference images, videos, or audio. Pass `requests`: ONE object per clip (wrap even a single clip — `{ requests: [ { prompt } ] }`); add more objects (up to 10) to batch DIFFERENT clips in one call, and repeat an object for variations of one prompt — a single approval covers the batch. Models differ in the aspect ratios, durations, resolutions, and media they accept — call list_video_models to check. Video generation is long-running: each clip is submitted and polled for you. A clip that finishes in time returns a hosted video URL plus a local file `path`; a clip still generating returns `{status:"pending", ...}` (a job handle, NOT an error) — pass that exact handle to `job_status` to retrieve it, and never re-submit a pending clip. Set dry_run=true to preview the exact requests without generating (no credits spent).Each entry in `results` is one of three things: finished media; a `{status:"pending", ...}` job handle to rejoin with job_status; or a failure carrying `ok: false` and an `error`. A failed entry is terminal — report its `error` and never poll or re-submit it. Read every entry rather than the top-level counters alone.

Parametersdry_runrequestsrequired

list_video_models

List the available video-generation models with, for each, its full schema: modes (text / image / first-last-frame / reference), the aspect ratios, durations and resolutions it accepts, which media it takes (start/end frame and reference image/video/audio with max counts), whether it has native audio, plus strengths and price. This is the authoritative source for a model's exact ranges — call it when choosing a model for an open-ended request, or to check what a model accepts before setting aspect_ratio / duration / resolution / media. Pass an optional 'query' to filter by use-case keyword (e.g. 'cinematic', 'fast', 'audio').

Parametersquery

audio_generate

For a user's voiceover request, load the `generating-audio` skill BEFORE calling this — it picks the right model and voice and prepares the script for reading aloud (this tool does none of that, and calling it raw gives a flat, mispronounced read). Turn written text into spoken audio: voiceovers, narration, ad reads, character lines, or any script read aloud. Pass `requests`: ONE object per clip (wrap even a single clip — `{ requests: [ { text } ] }`); add more objects (up to 10) to generate DIFFERENT lines in one call — a single approval covers the batch. Each result carries the spoken audio plus a local file `path`, or a structured error with a hint. This generates speech and nothing else: no sound effects, music, or ambience, no re-voicing an existing recording, and no dubbing a video. If the user asks for one of those, say so plainly rather than substituting a different tool. Every request needs a `voice` — the `voice_id` of a row from list_voices. There is no default voice. Models differ in expressiveness, language coverage, speed, price, and per-request character limit — call list_audio_models to compare them. Set dry_run=true to preview the exact requests without generating (no credits spent).Each entry in `results` is one of three things: finished media; a `{status:"pending", ...}` job handle to rejoin with job_status; or a failure carrying `ok: false` and an `error`. A failed entry is terminal — report its `error` and never poll or re-submit it. Read every entry rather than the top-level counters alone.

Parametersdry_runrequestsrequired

list_audio_models

List the available speech models — for each, its strengths, price, per-request character limit, language coverage, and the audio types it supports — plus the output formats audio_generate accepts. Every model works with every voice, so voices are a separate concern — use list_voices for those. This is the authoritative source for what a model accepts; call it when choosing a model for an open-ended request, or to check a value before setting it. Pass an optional 'query' to filter models by use-case keyword (e.g. 'expressive', 'long-form', 'fast').

Parametersquery

list_voices

Find a voice to speak with, and get the `voice_id` that audio_generate requires. Returns the voices saved in the active ElevenLabs account — the user's own on their key, or the shared SuperCMO set on a managed key — each with its gender, accent, age, use-case and a `preview_url` you can hand the user so they hear it before committing. Filter by what the brief actually demands (a stated gender or accent is not negotiable) and keep `limit` small: offer a few candidates with their previews rather than a long list. A voice missing the attribute you filtered on is kept rather than dropped, because a voice the user cloned themselves often carries no labels at all. If the account holds no voices the result says so — a newly created ElevenLabs account starts empty, and voices must be added in the ElevenLabs dashboard before anything can be spoken.

Parametersagelimitaccentgendersearchlanguageuse_case

url_extraction

Extract structured data from a web page — a product listing (Amazon, Shopify, AliExpress, any store) or any URL — guided by a prompt and/or a JSON schema. Returns the requested fields (e.g. name, brand, price, description, specs) and any gallery image URLs as a compact JSON object — not the page's full text — plus page metadata. Omit both prompt and schema to get the page's own text (markdown) instead, which costs less, together with the colours, fonts and logo the page renders (branding) and a screenshot URL of the page as a visitor first sees it. A page that answers HTTP 400 or above comes back as a failed read. Use when you need specific data, image URLs or the text of a page. Set dry_run=true to preview the exact request without spending.

Parametersurlrequiredpromptschemadry_run

image_analysis

Look at one or more images (local file paths or image URLs) and answer a question about each — returns text, not new images. Use to read a product photo (category, materials, on-pack text, distinctive details), to judge whether a shot is product-only or shows a face, or to describe any image's content, layout, or text. Pass `requests` to read several images in ONE call — they are analyzed in parallel, so a batch costs about the same wall time as its slowest image. Give a specific 'prompt' for a focused answer; omit it for a general description. Set dry_run=true to preview the request without spending.

Parametersimagepromptdry_runrequests

video_analysis

Watch one or more videos (local file paths or video URLs) and answer a question about each — returns text, not new video. Use to read a clip before generating or matching it, to describe what happens in it, or to transcribe what is said. Pass `requests` to watch several videos in ONE call — they are analyzed in parallel, so a batch costs about the same wall time as its slowest clip. Analyzes a clip inline, so a very large file may be rejected — trim or link a shorter clip if so. Set dry_run=true to preview the request without spending.

Parametersvideopromptdry_runrequests

social_research

Pull read-only structured public data from social platforms and ad libraries — competitor ads (Meta/Facebook + Instagram, LinkedIn), profiles, posts, comments, transcripts, hashtag/keyword search, and subreddit / trend discovery. Two steps: call list_research_sources FIRST to see the platforms, their endpoints, and each endpoint's params; then call this with `platform`, `endpoint`, and a `params` object built from that endpoint's required/optional params. Returns the source's structured JSON in `data`, or a structured error naming the missing or unknown params. Known endpoints are projected to their readable fields and one media URL per item, with page-level facts carried once in `advertisers` rather than repeated on every row, and `shaping` says what was dropped; `fields` widens or narrows that. Every response is also written to a file: `saved` carries its `path`, the run's `output_dir` for anything built from it, the count and the cursor, so a response can be handed straight to a script without being copied out of the conversation. Where the response is too large to read, `saved.inline` is false and `data` is omitted — use the file. Use for competitor and market research, audience listening, and trend discovery — this is read-only public data, not posting and not private data. Set dry_run=true to preview the exact request without spending.

Parametersfieldsparamsdry_runendpointrequiredplatformrequired

list_research_sources

List the available research sources for social_research — every platform, its endpoints, and each endpoint's required and optional params plus per-call cost. Call this FIRST whenever you need competitor ads, profiles, posts, comments, transcripts, or platform search and don't already know the exact platform + endpoint + params. Pass an optional 'query' to filter by platform, endpoint, or keyword (e.g. 'ads', 'reddit', 'comments').

Parametersquery

transcribe

Transcribe speech from an audio or video file into text with word-level timestamps. Use it to caption a video (chain transcribe -> caption_video), to read a voiceover back, or to analyse a competitor ad's spoken script. `audio` is a local file path or an http(s) URL (audio or video). Returns {ok, text, words:[{word, start, end}], duration, language}, or a structured error. Set dry_run=true to preview the request without spending.

Parametersaudiorequireddry_runlanguage

video_stitch

Join finished video clips into one file, in the order given, with a hard cut between each and each clip's audio kept — this assembles existing clips, it does not generate new video. Use it to build a video longer than a single model clip: generate the shots with video_generate, then stitch them. Do NOT use it for a single clip, or for a batch of clips meant to stay separate. Three optional layers, each its own parameter: lay a voiceover over the picture (pass `narration` — ONE take per clip, in clip order, NOT one joined track; each take is aligned to its own clip so nothing drifts), lay a background-music track under the whole thing (pass `music`), or burn in subtitles from an SRT file (pass `subtitles`); clips of different sizes are scaled to a common frame. Returns the output file `path` with its duration, resolution, and size, or a structured error with a hint. Requires ffmpeg on the system. Set dry_run=true to preview the plan without running anything.

Parametersclipsrequiredmusicoutputdry_runnarrationsubtitles

caption_video

Burn styled, social-style captions into a video from a word-timed transcript — local ffmpeg, no credits. The usual chain is transcribe -> caption_video: run transcribe on the video (or its voiceover) to get word timestamps, then pass those here. Captions are styled and positioned with a font bundled in the package (no system-font dependency); optional karaoke highlights each word as it is spoken. Timestamps are relative to the video's own audio (t=0). Returns the output file `path` with its duration, resolution, and size, or a structured error with a hint. Requires ffmpeg. Set dry_run=true to preview without rendering.

Parametersstylevideorequiredoutputdry_runtranscriptrequired

video_overlay

Stamp a logo, timed text, and a branded end card onto a video — local ffmpeg, no credits. Overlay a logo watermark at a chosen corner, drop in timed text (CTAs, offers, captions you place yourself), and/or append an end-card image as a short closing still. Pass at least one of logo / texts / end_card. Text is rendered with a bundled font (no system-font dependency). Returns the output file `path` with its duration and resolution, or a structured error. Requires ffmpeg. Set dry_run=true to preview.

Parameterslogotextsvideorequiredoutputdry_runend_cardlogo_scalelogo_positionend_card_duration

job_status

Retrieve a long-running generation that was submitted earlier but hasn't finished — any result from a generation tool that came back as `{status:"pending", ...}` (a job handle, not media). Pass the exact pending handle object(s) in `jobs`; NEVER re-submit a pending job with the tool that created it — that starts (and bills) a new one. Each job comes back one of three ways: **finished** (a hosted URL plus a local file `path`); still **pending** (`{status:"pending", ...}`), in which case call job_status again with the same handle after a short wait; or **failed**, carrying `ok: false` and an `error`. A failed job is terminal — it will never finish, so report the error and never poll or re-submit that handle. A batch can mix all three, so read every entry in `results` rather than the top-level counters alone. This works for any kind of pending generation and only rejoins an existing job — it neither starts nor bills a new one.

Parametersjobsrequired

calendar_list

List the caller's calendar events — tasks and posts — ordered by when they next fire. Each event includes a computed `next_occurrence`: the ISO-8601 timestamp of its next fire time, derived from the event's `at` or `rrule` so the caller never has to compute recurrence itself. Defaults to upcoming, still-scheduled events; pass `status` to also see cancelled or historical (done/failed/missed) events. Narrow further with `window_start`/`window_end` (a time range), `kind` (task vs post), or `channel` (exact match on the free-text channel), and cap how many come back with `limit`. Use this before calendar_add to check for a clash, or before calendar_update/calendar_remove to find the event's `id`.

Parameterskindlimitstatuschannelwindow_endwindow_start

calendar_add

Schedule a new calendar event that fires once or on a recurrence. Two kinds: 'task' re-invokes the agent with `prompt` when it fires — write the prompt as a complete, self-contained instruction, since the agent has no memory of this call when it runs. 'post' publishes prepared `content` through a named tool with no model call in the loop — requires `content`, `channel`, and `publish_tool`. Exactly ONE of `at` (a one-shot ISO-8601 timestamp, which must be in the future) or `rrule` (an RFC 5545 recurrence rule) is required — never both, never neither. `channel` is free text, not a router: it is a hint the tool named in `publish_tool` reads to decide where to post, so word it the way that tool expects, never a fixed enum. `publish_tool` must name a tool the caller can actually call right now — a currently-connected tool, never invented or assumed; the event hard-fails at fire time if the named tool is not connected. `media` is an optional list of local file paths and/or URLs to publish alongside `content`. `timezone` is an IANA name (e.g. 'America/New_York') the schedule is interpreted in.

Parametersatkindrequiredmediarruletitlerequiredpromptchannelcontenttimezonepublish_tool

calendar_update

Change fields on an existing calendar event, or re-arm/cancel it. Pass only the fields you want to change — anything omitted is left as it was. `kind` is fixed at creation and can't be changed here. The same rules as calendar_add apply to whatever you set: exactly one of `at`/`rrule` if you're changing the schedule, and `content`+`channel`+`publish_tool` together if the event is a 'post'. `channel` stays free text read by `publish_tool`, never a routing enum, and `publish_tool` must still name a currently-connected tool. Pass `status: "cancelled"` to cancel the event without deleting it, or `status: "scheduled"` to re-arm a cancelled one.

Parametersatidrequiredmediarruletitlepromptstatuschannelcontenttimezonepublish_tool

calendar_remove

Cancel a calendar event by `id` — it stops firing but is not deleted, the same effect as calendar_update with status='cancelled'. Use calendar_list first if you don't already have the event's `id`.

Parametersidrequired

Version history

4
  1. v0.1.27LatestOct 21, 2026
  2. v0.1.26Oct 15, 2026
  3. v0.1.25Oct 15, 2026
  4. v0.1.24Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts