shorts-studio
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@shorts-studiomake a short about why honey never spoils"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🎬 shorts-studio: MoneyPrinterTurbo-style short videos inside Claude
Type a topic and get a finished vertical video: a script written by Claude, a natural neural voice-over, matching stock footage, word-by-word highlighted subtitles and a 1080×1920 MP4 ready for YouTube Shorts, TikTok and Instagram Reels.
/shorts-studio:make why honey never spoils
Real output: one command, one finished 1080×1920 video. More frames
No LLM API key. Claude is the scriptwriter, so there's no OpenAI or DeepSeek bill.
Free voice-over: Microsoft Edge neural voices (300+ voices, 70+ languages, including Arabic), with word-level timing.
Footage: Pexels or Pixabay (free keys), or Wikimedia Commons with no key at all. Falls back to Ken Burns zoom on photos. Letterbox bars are auto-cropped.
Viral-style subtitles: current-word highlight or classic lines; bottom, center or top; any colour, font or size; RTL-safe.
Your own media: your clips, images, voice recording and background music.
Credits file: every clip's author, licence and source link, ready to paste into the description.
Formats: portrait 9:16, landscape 16:9 or square 1:1.
Tested: 16 automated tests (unit, offline render, live TTS and live footage), Windows, macOS and Linux.
Install (Claude Code)
claude plugin marketplace add alycheaib/shorts-studio
claude plugin install shorts-studio@shorts-studioYou also need ffmpeg: winget install Gyan.FFmpeg, brew install ffmpeg or apt install ffmpeg. Or set FFMPEG_PATH.
Then, in Claude Code:
Command | What it does |
| One finished video, plus a title, description and hashtags |
| A series of videos and a posting plan |
Videos are saved to ~/Videos/shorts-studio/<date>-<title>/: video.mp4, voice.mp3, subtitles.srt, script.txt, credits.txt.
Any MCP client (Claude Desktop, Cursor, …)
{ "mcpServers": { "shorts-studio": { "command": "npx", "args": ["-y", "github:alycheaib/shorts-studio"] } } }Related MCP server: Video MCP
Tools
Tool | |
| script and search terms → MP4 (voice, footage, subtitles, music) |
| text → MP3 and word-timed SRT |
| browse the Edge neural voices by language and gender |
| preview stock clips with author and licence |
| check ffmpeg, providers and folders |
Configuration (all optional)
Env var | |
| free at pexels.com/api, the best footage |
| free at pixabay.com/api/docs |
| a folder of royalty-free music; a random track is mixed in at 15% volume |
| default |
| a custom ffmpeg binary |
| extra fonts for subtitles |
How it works
topic ──► Claude writes hook-first script + English search terms
──► Edge TTS (word boundaries) ──► captions (SRT + styled ASS)
──► Pexels / Pixabay / Wikimedia search ──► download + validate + cache
──► ffmpeg: cut 4 s segments, auto-crop, fill 9:16, concat
──► mix voice (+ music), burn subtitles ──► MP4 (H.264/AAC, faststart)Develop
npm install
npm test # 16 tests (the online ones skip without network)
npm run build # bundles plugin/server.mjsCredits
The pipeline design is inspired by MoneyPrinterTurbo (MIT), rewritten from scratch in Node.js as an MCP server so it runs inside Claude. Respect each footage licence; credits.txt lists them for you.
Need it customised?
Branded templates, auto-posting, a hosted API, or a white-label version for your agency: open an issue or contact Aly Cheaib.
MIT © Aly Cheaib
Available Tools
5 toolsdoctorCheck setupARead-only
Check ffmpeg, footage providers, output and cache folders.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a non-mutating inspection. The description adds the useful scope of what is inspected, but does not say whether it merely reports or can also remediate problems, whether provider checks make network calls or require credentials, or how failures are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence fragment with no wasted words, and the most important items (ffmpeg, footage providers) are front-loaded. It is a fragment rather than a full sentence, but that costs little here.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations covering return shape, the description leaves the agent guessing what a result looks like — per-component pass/fail, a summary string, or a thrown error. For a diagnostic tool the output is the whole point, so this is a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline applies. The enumeration of checked areas at least confirms no targeting input is accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the verb ('Check') and enumerates the specific resources inspected: ffmpeg, footage providers, output folders, and cache folders. That is concrete enough to distinguish it from siblings like make_short_video or search_footage, though the tool name 'doctor' alone would be opaque without the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — an agent can infer this is a preflight/diagnostic check to run before generating videos, but the description never states when to call it (e.g., before first use, after a failure) or that it should be preferred over attempting a render and failing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_voiceoverGenerate a voice-overC
Free neural text-to-speech (Microsoft Edge voices, 300+ voices, 70+ languages) to MP3, plus an SRT subtitle file timed to the words.
| Name | Required | Description | Default |
|---|---|---|---|
| rate | No | ||
| text | Yes | ||
| pitch | No | ||
| voice | No | ||
| language | No | ||
| output_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint=false and openWorldHint=true, so the agent knows this writes artifacts and reaches a network service. The description adds the engine ('Microsoft Edge voices') and the second output artifact (SRT subtitles), which is real added context, but it says nothing about where files land, what is returned (paths?), latency, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence, front-loaded with the core capability and output formats. The parenthetical voice/language counts earn their place; nothing is wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter generative tool with zero schema descriptions and no output schema, the definition is too thin: an agent cannot tell how to format rate/pitch, whether voice must come from list_voices, or what the return value will be. The 'free' and engine details are nice but not sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across six parameters, so the description must carry the burden and largely does not. It loosely implies 'voice' and 'language' semantics via '300+ voices, 70+ languages' but never explains rate/pitch formats (e.g. '+10%', '-2Hz'), the role of output_dir, or how voice and language interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource (neural text-to-speech generation) and even names the concrete artifacts produced: an MP3 and an SRT subtitle file timed to the words. It is clearly distinct from list_voices or make_short_video, though it does not explicitly state that distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus siblings: it never says to call list_voices first to discover valid voice names, nor what to do when text exceeds the 6000-character limit. Usage is only implied by the tool's obviousness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_voicesList voicesARead-only
List the free Edge neural voices, optionally filtered by language prefix (e.g. "ar", "en-GB") and gender.
| Name | Required | Description | Default |
|---|---|---|---|
| gender | No | ||
| language | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read profile and remote-source nature are covered structurally; the description only adds that the catalog is 'free Edge neural voices'. It does not say whether the catalog is static or live-fetched, whether results are cached, or what a caller should expect in terms of availability or limits. This is useful but modest added context on top of existing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the resource and immediately follows with the filtering options; no padding, hedging, or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool with no output schema, the description covers what is listed and how to filter, but leaves the return shape (names, IDs, locale metadata) and the intended follow-on use with generate_voiceover unstated. Since the schema description coverage is 0% and there is no output schema, the description carries the full documentation burden and is only partially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates by specifying that 'language' is a prefix match with concrete examples ('ar', 'en-GB'), which meaningfully clarifies matching behavior beyond the bare string type. The gender parameter gets no extra description, though its enum values (Male/Female) are self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('List the free Edge neural voices') plus its filter scope, which is clearly distinct from siblings like generate_voiceover and search_footage. It stops short of explicitly contrasting itself with generate_voiceover, which is the sibling most likely to be confused with a voice-discovery tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Optionally filtered by language prefix and gender' implies how to narrow results, but there is no explicit when-to-use guidance, no statement that this is the discovery step before generate_voiceover, and no note that it must be called without filters to enumerate everything.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_short_videoMake a short videoA
Render a narrated, subtitled short video from a script you wrote: free neural voice-over (Microsoft Edge TTS), stock footage for each search term (Pexels/Pixabay with free keys, else Wikimedia Commons), word-highlight subtitles, optional background music, MP4 output. Takes 1-5 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| bgm | No | false disables background music | |
| rate | No | Speaking speed, e.g. "+10%" | |
| order | No | ||
| pitch | No | ||
| title | No | Used for the file name | |
| voice | No | Edge voice, e.g. en-US-AndrewNeural, en-US-AvaNeural, ar-SA-HamedNeural, ar-EG-SalmaNeural. See list_voices | |
| aspect | No | portrait 1080x1920 (default), landscape 1920x1080, square 1080x1080 | |
| script | Yes | Spoken narration only, in the target language | |
| bgm_file | No | Background music file (mp3/m4a/wav). Or set SHORTS_BGM_DIR for a random track | |
| language | No | ISO code, e.g. en, ar, fr (picks a default voice) | |
| provider | No | ||
| materials | No | Your own video/image files (absolute paths) or URLs, used before stock footage | |
| subtitles | No | ||
| bgm_volume | No | Default 0.15 | |
| output_dir | No | ||
| voice_file | No | Use this audio file as narration instead of TTS (subtitles are timed by text length) | |
| search_terms | No | English visual search terms in script order | |
| clip_duration | No | Seconds per clip before cutting (default 4) | |
| clips_per_term | No | ||
| materials_only | No | Use only "materials", no stock search |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, openWorldHint=true) it discloses the external dependencies and their cost model ("free keys" for Pexels/Pixabay, Wikimedia Commons fallback), the TTS engine (Microsoft Edge), the output format (MP4) and a 1-5 minute runtime. It does not say where the file lands or what happens when a provider key is missing, which are the remaining behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the outcome, and the parenthetical list efficiently packs the pipeline details. It is a single dense sentence, so the runtime note at the end slightly trails, but nothing is padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 20-parameter, nested-schema, no-output-schema tool, the description covers the high-level contract well. It leaves unexplained how output is named/located (output_dir, title), how materials_only and provider interact, and how failures degrade - details an agent needs to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 70%, so most parameters are self-documented. The description adds meaning for a few: search_terms are tied to individual footage lookups, bgm is framed as optional, and the voice-over is framed as the default narration source. It says nothing about materials/materials_only, order, provider precedence, or the nested subtitles object, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and deliverable: "Render a narrated, subtitled short video from a script", then enumerates the pipeline (TTS voice-over, stock footage, subtitles, BGM, MP4). Because it is the only end-to-end render step among siblings like generate_voiceover and search_footage, an agent can place it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: it is the tool you reach for when you want a finished video, and the presence of materials/materials_only implies alternatives exist. It never states when to prefer generate_voiceover or search_footage as standalone steps, nor any prerequisites such as API keys for Pexels/Pixabay being needed before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_footageSearch stock footageARead-only
Preview stock clips for a search term (no download): source, size, duration, author and licence.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | ||
| limit | No | ||
| aspect | No | ||
| provider | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds real value beyond them: it declares this is preview-only with no download, and since there is no output schema it enumerates the fields the agent will receive. It stops short of describing provider fallback ('auto') or result ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the scope constraint front-loaded and a compact enumeration of return fields. Nothing is redundant and nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter, open-world search tool with no output schema and thin annotations, the description covers purpose and return shape but leaves parameter behavior undocumented. An agent can call it, but would guess at what 'provider: auto' does and how 'limit' affects results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden of explaining the four parameters, and it explains none of them. The meanings of 'term', 'limit' (max 20), 'aspect', and especially 'provider' with its 'auto' default are left entirely to inference from the bare JSON schema enums.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Preview stock clips for a search term') plus the fields returned (source, size, duration, author, licence), so the intent is unambiguous. It does not explicitly differentiate itself from siblings such as make_short_video, though the 'preview only' framing makes the boundary reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(no download)' signals this is a preview/discovery step rather than a fetch, which implicitly tells the agent when to use it. However, there is no explicit when-to-use or when-not-to-use guidance, and no mention of what alternative to use if the agent wants the actual asset or wants to assemble a video.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
doctor - First observed
generate_voiceover - First observed
list_voices - First observed
make_short_video - First observed
search_footage
TDQS
Scored across 5 tools
Each tool has a largely distinct role: doctor is health-check, list_voices is discovery, search_footage is preview, generate_voiceover is an audio artifact, and make_short_video is the full pipeline. The only soft overlap is that make_short_video internally performs voiceover and footage steps, so an agent must infer that the single-purpose tools are building blocks or previews rather than alternatives — the descriptions clarify this, but only after reading.
Four of five names follow a clean verb_noun pattern (make_short_video, generate_voiceover, list_voices, search_footage). 'doctor' is a bare noun that breaks the convention, though it is a recognizable idiom for a diagnostics command.
Five tools is well-scoped for a video-generation server: one diagnostics, one orchestrator, and three focused helpers. Nothing feels padded or redundant.
The core lifecycle — check environment, pick voice, generate audio, scout footage, render video — is covered with no true dead ends. Minor gaps: search_footage only previews with no standalone download tool, and there is no way to list or supply background music, validate a script, or generate audio from an existing file.
Maintenance
Related MCP Connectors
Make, render and auto-post AI faceless videos to YouTube, TikTok and Instagram from any MCP client.
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
MCP server for Hailuo (MiniMax) AI video generation
MCP server for Google Veo AI video generation
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that turns Claude into a hands-on video editor for short-form videos, enabling music generation, script writing, voiceover synthesis, and video stitching with FFmpeg. It also features a text-to-documentary skill that converts long-form text into structured documentary videos.MIT
- FlicenseNot gradedqualityDmaintenanceA local MCP server that gives Claude Desktop full video editing capabilities via FFmpeg, Whisper, and yt-dlp.-
- AlicenseNot gradedqualityDmaintenanceAutomated short-form video creation from text prompts, combining text-to-speech, captions, background videos, and music, exposed as an MCP server for AI agents.68 npmMIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that gives Claude a conversational video-editing toolkit — trim, crop, color grade, caption, beat-sync, stabilize, and more — built on ffmpeg, faster-whisper, and yt-dlp, with optional DaVinci Resolve and CapCut integration.1MIT