Developers make a lot of video without meaning to: release demos, conference talks, pairing sessions, livestreams, Loom walkthroughs. Most of it ends up sitting in a recordings/ folder, because turning a 40-minute talk into five captioned shorts means opening an editor, scrubbing the timeline, exporting, captioning, uploading and scheduling. Nobody with a backlog of pull requests does that.
But you already have an agent in your terminal. Claude Code can call remote tools over MCP, so the whole "clip, caption, schedule" pipeline can be a single prompt run from your project directory. This post walks through the setup, the prompt patterns that work, and the parts to keep a human in the loop for.
Why do this from Claude Code at all?
A browser clipping tool works fine. The terminal has three advantages for developers:
- Context. Claude Code can read your changelog, README and release notes, so it writes clip titles and captions that are accurate about what shipped.
- Batching. Point it at a folder and it works through every file, without you uploading them one by one.
-
Repeatability. Save the prompt in your repo (say in
CLAUDE.mdor a slash command) and every release gets the same treatment.
Step 1: Add a remote MCP server
You need a server that exposes clipping, captioning and scheduling tools. I'll use Unsora, which exposes those (plus video generation) over remote MCP with Streamable HTTP:
claude mcp add --transport http unsora https://mcp.tryunsora.com/mcp
Then check it's connected:
claude mcp list
The first time you call a tool, it asks you to sign in through the browser. Your credits and connected social accounts stay with that login. Setup for Cursor and other clients is on the connector page.
If your team shares the project, you can commit the server entry to .mcp.json so everyone gets it. Just never commit API keys. If you use the REST API instead of OAuth, put the key in an environment variable.
Step 2: Understand the tool chain
Once it's connected, ask Claude Code to list the server's tools. The ones that matter for this workflow follow a simple async pattern:
| Step | Tool | What it does |
|---|---|---|
| Clip | create_clipping |
Finds the strongest moments, reframes to 9:16 with the speaker centred, burns in word-by-word captions |
| Wait | wait_for_clipping |
Polls until the job finishes (minutes, not hours) |
| Thumbnail | create_thumbnail |
Optional cover image per clip |
| Schedule | create_post |
Queues the post to YouTube, TikTok, Instagram, Facebook or LinkedIn |
Clipping is asynchronous, so the agent has to submit a job and then wait for it. That's exactly what agents handle well and shell scripts handle poorly.
Step 3: The one-prompt pipeline
From your repo root:
Take recordings/v2.4-launch-demo.mp4. Find the 5 strongest moments about
new features (use CHANGELOG.md to know what's new). Cut them 9:16 with
yellow captions. Give each a hook title under 60 characters. Then schedule
one per day to YouTube Shorts and LinkedIn starting Monday 9:00, with a
different caption per platform. Show me the plan before scheduling.
What happens:
- Claude Code reads
CHANGELOG.mdto learn what shipped. - It calls
create_clippingwith your instructions ("moments about new features"). - It waits for the job, then shows you the clips with timestamps.
- It drafts captions per platform. LinkedIn gets a more professional tone and Shorts gets a hook.
- It stops, because you asked to see the plan first, and only calls
create_postonce you approve.
That last line matters. Nothing should post without a human saying yes. Unsora also won't publish until you confirm, but it's good practice to put the checkpoint in the prompt too.
Step 4: Batch a whole folder
The real win is the backlog:
For every .mp4 in recordings/talks/, pull the 3 best moments, caption them
in our brand style (white text, black outline), and queue them across the
next three weeks on TikTok and YouTube, max one post per day per platform.
Write a summary table to clips-plan.md before scheduling anything.
Writing the plan to a file gives you something to review in a diff, which suits developers better than scrolling a chat log.
Step 5: Make it a reusable command
Save the prompt as a project slash command, for example .claude/commands/ship-shorts.md:
Clip $ARGUMENTS into 3-5 captioned 9:16 shorts focused on what's new in
CHANGELOG.md. Hook titles under 60 chars. Draft per-platform captions.
Write the plan to clips-plan.md and wait for my approval before scheduling.
Now every release ends with /ship-shorts recordings/latest.mp4.
Prompt tips that improve output
- Describe the moments by meaning. "Every time I run the CLI" or "the part where I explain the migration" works better than timestamps.
- Name the caption style once and reuse it. Consistency across clips reads as a brand.
- Ask for more clips than you need. Picking 5 out of 10 is faster than re-running.
- Translate captions if your users aren't mainly English speakers. Ask for it per clip.
- Need fresh b-roll for a gap? The same server can generate it with Seedance, Kling or Veo models. See the AI video generator page.
What to keep human
Agents are good at the mechanics, not the judgement. Review:
- Accuracy. Does the clip claim a feature works in a way it doesn't?
- Context loss. A 30-second cut of a nuanced point can mislead.
- Platform fit. Some clips belong on LinkedIn only.
- Posting cadence. Don't flood a channel just because the agent can.
Cost and limits
Clip runs take a few minutes, longer for a two-hour source. Unsora is paid (from $19/month with a 3-day trial). The MCP server, web app and REST API all use the same account and credits, so you can move between terminal and browser. Frame-accurate editing still belongs in a real editor. This workflow is for short-form repurposing.
Wrapping up
If you've already connected a video MCP server to Claude, this is the natural next step. I covered the basics of adding a custom connector for video generation in an earlier guide. Clipping and scheduling turn your recordings folder from storage into a content pipeline you can run from the same terminal you ship code from.
Top comments (0)