Skip to main content
Glama

video-studio-mcp

An MCP server that builds narrated 9:16 documentary videos (TikTok / Reels / Shorts) end to end, entirely on your own machine:

Wikimedia Commons imagesAI voiceoverRemotion render → MP4 + QA frames + publishing copy.

You describe a topic; the assistant picks images, writes the storyboard, narrates it, renders it, and hands you the file plus a title/description/hashtags.

The bundled template and default voices are Vietnamese-first. The pipeline itself is language-agnostic — pass any ElevenLabs voice and write the narration in whatever language you want.


Requirements

Needed for

Install

Node.js ≥ 20

everything

nodejs.org

ffmpeg + ffprobe

measuring narration length, extracting QA frames

brew install ffmpeg · sudo apt install ffmpeg · winget install Gyan.FFmpeg

ElevenLabs API key

real voiceover

free key at elevenlabs.io

ImageMagick (optional)

slightly nicer thumbnails; ffmpeg is used otherwise

brew install imagemagick

Without an ElevenLabs key the server falls back to the macOS say command — noticeably lower quality, and macOS only. On Linux/Windows a key is required.

The server checks for ffmpeg before starting any job and tells you exactly what is missing, rather than failing silently inside a background render.


Related MCP server: ittybitty MCP server

Install

Add to your MCP client config:

{
  "mcpServers": {
    "video-studio": {
      "command": "npx",
      "args": ["-y", "video-studio-mcp"]
    }
  }
}

Client

Config file

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) · %APPDATA%\Claude\claude_desktop_config.json (Windows)

Claude Code

claude mcp add video-studio -- npx -y video-studio-mcp

Cursor / Cline / others

their own mcp.json — same shape

Restart the client afterwards.


Your API key

No API key ships with this package. You supply your own, one of two ways:

Option A — put it in the MCP config (standard, key never enters a chat transcript):

{
  "mcpServers": {
    "video-studio": {
      "command": "npx",
      "args": ["-y", "video-studio-mcp"],
      "env": { "ELEVENLABS_API_KEY": "sk_your_key_here" }
    }
  }
}

Option B — let the assistant ask you. Just start making a video. When a key is needed, the server says so and the assistant asks for yours, then calls its set_api_key tool. The key is written to ~/.config/video-studio/config.json with 0600 permissions and never leaves your machine.

Resolution order: ELEVENLABS_API_KEY env → ~/.config/video-studio/config.json~/.claude/elevenlabs.env.

Ask "where is my video-studio key coming from?" and the assistant will report the active source.


Usage

Just ask, in any language:

"Make a video about the Battle of Bach Dang, 938."

The assistant will:

  1. list_templates — show the available looks and ask you to pick one. This is the one decision it will not make for you.

  2. search_wikimedia_images — find freely-licensed (PD / CC) photos, recording license + author for every one.

  3. create_video — scaffold the Remotion project, download images, write the storyboard, generate the voiceover, and render. Runs in the background.

  4. project_status wait_for='build' — returns the MP4 path plus four QA frames, which the assistant inspects for layout, legible text, correct diacritics, and mis-cropped subjects.

  5. write_publish_meta — a hook title, a description with image credits, and hashtags, saved to publish.txt / publish.json.

Output lands in ~/Work/VideoReview/<slug>/ — change that with the VIDEO_STUDIO_BASE environment variable.

<slug>/
├── out/video.mp4      the finished video
├── content.json       the storyboard — edit and re-render to tweak
├── public/images/     downloaded source images
├── public/voiceover/  per-scene narration mp3s
├── qa/                extracted QA frames
└── publish.txt        title + description + hashtags, ready to paste

Tools

Tool

What it does

list_templates

every template with its look and what it suits

template_schema

the content.json schema for one template

search_wikimedia_images

find PD/CC images (title, license, author, dimensions, URL)

preview_images

download URLs and return thumbnails to eyeball

create_video

one-shot: scaffold + images + storyboard + voiceover + render

new_video_project · add_images · write_content · generate_voiceover · render_video

the same pipeline, step by step

project_status

poll a background job; returns duration, audio check, QA frames

write_publish_meta

save title + description + hashtags

set_api_key

save your ElevenLabs key, or report where the current one comes from


Configuration

Variable

Default

Purpose

ELEVENLABS_API_KEY

your key; highest priority

VIDEO_STUDIO_BASE

~/Work/VideoReview

where projects are created

ELEVENLABS_VOICE_ID

template's voice

override the narrator globally

Per-video overrides live in that project's content.json under meta: voiceId, voiceSpeed, voiceModel. meta beats the environment — so each template can own its voice without a global setting silently overriding it.


Templates

id

Look

Best for

history

aged paper, serif type, sepia photos in frames, year seals, timeline

historical figures, dynasties, monuments, heritage sites, past events

Adding one: create templates/<id>/ containing template.json (manifest), Composition.tsx, and optionally poster.jpg. The server rescans the directory on every call — no server code to change.

Shared building blocks live in templates/_shared/: Ken Burns motion, photo layouts, scene dissolves, Vietnamese text normalisation. Reuse them instead of rewriting.


Using it as a Claude Code skill

skill/SKILL.md documents the full workflow including a shell-only path that bypasses MCP. To install:

mkdir -p ~/.claude/skills/video-studio
cp -R "$(npm root -g)/video-studio-mcp/"{base,templates,scripts} ~/.claude/skills/video-studio/
cp "$(npm root -g)/video-studio-mcp/skill/SKILL.md" ~/.claude/skills/video-studio/

Pick one path — MCP or CLI, never both. Both drive the same npm run scripts in the same project directory, so mixing them renders twice and can overwrite the MP4 mid-write.


Gotchas worth knowing

  • Vietnamese ALL-CAPS with hook accents. Chromium renders Ỷ Ủ Ổ Ả Ẩ as acute accents. Keep titles sentence-case; write_content rejects the dangerous cases outright.

  • Wikimedia rate limits. upload.wikimedia.org returns 429 aggressively for original file URLs. The downloader asks the API for a /thumb/ URL first and retries with backoff.

  • Reused slugs. A directory built by another template is refused rather than rendered over — different templates render to different filenames, which used to hang status polling forever.

  • Ultra-wide images (aspect > 1.9) crop badly as fullbleed; use editorial or framed.

Licensing of what you make

Everything is sourced from Wikimedia Commons (Public Domain / CC). Credit your sources — CC-BY and CC-BY-SA require attribution when you publish. The closing scene and the generated description both carry credits; keep them.

License

MIT

Available Tools

13 tools
add_imagesAdd images to projectA

Download chosen Wikimedia images into /public/images/. Pass the direct URLs from search results and a short filename for each (e.g. 'ngomon.jpg'). In content.json reference them as 'images/'.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes
imagesYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that images are downloaded to '<project>/public/images/' and how to reference them, adding behavioral context beyond annotations. Does not mention overwrite behavior or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, no redundant information. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Provides usage guidance for the tool's output (referencing in content.json) but lacks mention of prerequisites (e.g., project existence) and error scenarios. Adequate for a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Description explains the 'images' parameter (url from search results, short filename) but omits explanation of the 'slug' parameter, leaving it unclear. With 0% schema coverage, this is a partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it downloads Wikimedia images into a specific project directory, distinguishing it from sibling tools like search_wikimedia_images and preview_images.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage via 'Pass the direct URLs from search results', guiding the agent to use search results first. However, it does not explicitly state when to use this tool vs alternatives like preview_images.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_videoCreate the whole video (one-shot, autonomous)A

ONE-SHOT builder — the preferred path. Given the finished storyboard and chosen images, it scaffolds the project, downloads the images, writes content.json, then runs voiceover + render in ONE background job. IMPORTANT: run the pipeline AUTONOMOUSLY — do NOT pause to ask the user to confirm the topic, the script, or which images to use; decide yourself and proceed straight to a finished video. Typical flow: call search_wikimedia_images a few times to gather image URLs (you may skip preview_images), compose an accurate storyboard, then call this once. Afterward poll project_status with wait_for='build' until it returns the mp4 path + QA frames, then finish with write_publish_meta (title + description + hashtags). content_json = the full content.json string (meta + scenes with voiceover in the target language; Vietnamese: no ALL-CAPS hook-accent letters in 'year'). images = [{url, filename}] matching the 'images/' paths used in content_json.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYeskebab-case project name, e.g. 'bach-dang-938'
imagesYes
templateYestemplate id the user chose (see list_templates)
voice_idNoElevenLabs voice id (optional)
content_jsonYesthe complete content.json as a JSON string

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses autonomous one-shot execution, background job, and that no user confirmation is needed. Annotations (readOnlyHint false, idempotentHint false) align; description adds behavioral detail beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with key phrase 'ONE-SHOT builder — the preferred path,' but is somewhat lengthy with repeated context. Still organized well with flow steps. Minor redundancy (e.g., 'content_json = ...') could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description informs about polling project_status for mp4 path and QA frames, and finishing with write_publish_meta. Covers typical workflow and essential details for a complex tool. Could be more explicit about error handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds context beyond schema: content_json must include meta/scenes with voiceover and language-specific note, images must match paths, slug kebab-case. Schema already has descriptions, so description enhances but is not fully compensating for low coverage (80% is high).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it is a one-shot builder that scaffolds, downloads, writes content, and renders in one job. It distinguishes from siblings by being the preferred path and specifying typical flow after image gathering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use (after storyboard and images chosen, typical flow with search_wikimedia_images), and provides instructions: run autonomously, do not pause to ask user, then poll project_status and use write_publish_meta.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_voiceoverGenerate voiceover (background job)A

Start generating the Vietnamese/target-language voiceover for every scene using ElevenLabs eleven_turbo_v2_5 with the default Northern-accent Vietnamese voice 'Hien' (falls back to macOS say if no key at ~/.claude/elevenlabs.env). Runs in the BACKGROUND and returns immediately. Then call project_status with wait_for='voiceover' to wait for completion. Optionally pass an ElevenLabs voice_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes
voice_idNoElevenLabs voice id (optional)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses background execution, fallback behavior, configuration file location, and default voice—all beyond annotations. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Packs essential details (backend, voice, fallback, waiting instruction) into two efficient sentences, front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Fully explains return behavior and how to check completion, compensating for lack of output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaning to voice_id (optional, with default) and implies slug is a project identifier, compensating for 50% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool generates Vietnamese voiceover for every scene using ElevenLabs with a specific voice and fallback, distinguishing it from sibling tools like project_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains when to use (start voiceover generation) and how to wait for completion via project_status, but lacks explicit when-not-to-use or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_templatesList video templatesA
Read-only

START HERE for any 'make a video about X' request. Returns every available template with id, name, what it looks like, and what it is best for — plus a poster image when one exists. AFTER calling this you MUST let the user pick: present the templates and ask them to choose (use your AskUserQuestion tool so the choice renders the same in the desktop app and the terminal). Do NOT pick a template silently on the user's behalf. Once they choose, call template_schema with that id.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond the readOnlyHint and openWorldHint annotations, such as what fields the response contains (including poster image when exists) and the required follow-up action of user interaction. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (about 80 words), front-loaded with the main purpose, and structured with clear sections. Every sentence adds value: purpose, output details, and mandatory user interaction steps.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters, existing annotations, and no output schema, the description fully explains the tool's output and the required workflow after calling. It is complete for an agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so the baseline is 4 per instructions. The description does not need to add parameter information since there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool's purpose as 'START HERE for any make a video about X request' and lists exactly what it returns (id, name, appearance, best use case, poster image). This clearly identifies the tool and distinguishes it from siblings like template_schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: 'START HERE' for video requests, instructs the agent to present templates to the user and ask for a choice using AskUserQuestion tool, and warns against silent selection. It also indicates the next step (call template_schema with the chosen id).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

new_video_projectScaffold a video projectA

Create a new Remotion project at ~/Work/VideoReview// using the chosen template. Runs npm install (~15s). Do this once per video, after the user picked a template, before adding images or writing content.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYeskebab-case project name, e.g. 'bach-dang-938'
templateYestemplate id the user chose (see list_templates)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutation (readOnlyHint=false) and not idempotent. The description adds the detail that it runs npm install (~15s) and creates the project at a specific path. However, it does not disclose what happens if the project already exists (e.g., overwrite or error), which is a notable behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, consisting of two short sentences that convey the essential purpose, location, side effect (npm install), and usage context. No filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description does not explain what the tool returns, which is a minor gap. However, the tool's purpose is straightforward (project creation), and the usage context is well-specified. The description works well within the broader toolset, as implied by sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with descriptions for both 'slug' and 'template'. The description does not add additional semantics beyond what the schema provides. Baseline score of 3 is appropriate for full schema coverage with no extra parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a new Remotion project at a specific path using a chosen template, and positions it as the first step before adding media or content. This distinguishes it from sibling tools like add_images or write_content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Do this once per video, after the user picked a template, before adding images or writing content', providing clear context on when to use it. It also mentions the npm install duration. However, it does not explicitly state when not to use it or list alternative tools for other scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_imagesPreview candidate imagesA
Read-only

Download the given image URLs and return small thumbnails so you can visually judge which to use before committing. Use after search_wikimedia_images when you need to see the images.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYesimage URLs from search results

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint=true) indicate a safe read operation. The description adds that thumbnails are small and for visual preview before committing, which aligns with read-only behavior. There is no contradiction, and the text enriches the behavioral understanding beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and purpose. Every word contributes meaning, with no redundancy. Ideal conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single parameter with full schema coverage and no output schema, the description fully explains the tool's purpose, when to use it, and what it produces. No gaps remain for effective invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with the parameter 'urls' already described as 'image URLs from search results'. The description reiterates this context but does not add new semantic details beyond what the schema provides. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool downloads image URLs and returns thumbnails for visual judgment. It specifies the action (download, return), resource (image URLs), and context (before committing), distinguishing it from sibling tools like search_wikimedia_images.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use after search_wikimedia_images when you need to see the images,' providing clear context and sequence. It does not explicitly mention when not to use, but the guidance is sufficient for proper selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_statusCheck project / wait for a jobA
Read-only

Report voiceover + render progress for a project. With wait_for='voiceover' it waits (up to ~50s) until all scene mp3s exist; with wait_for='render' it waits until out/video.mp4 is ready, then returns the duration, whether audio is present, and 4 QA frames as images (inspect them: layout, readable text, correct diacritics; if a subject is mis-cropped, adjust focalX/focalY in content.json and re-render). If a job is still running after the wait, call again.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes
wait_forNonone

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, consistent with reporting status. Description adds behavioral detail: polling semantics (wait up to ~50s), returned data (duration, audio presence, 4 QA frames), and post-use actions (adjust focalX/focalY). No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with primary purpose, then conditional details. Every sentence provides value without redundancy. Length is appropriate for the information conveyed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers return values, timeout, and actionable QA instructions. Lacks details for error handling (invalid slug) and the 'build' option. Overall sufficient for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so description must compensate. It explains two of four enum values for wait_for (voiceover, render) and their behavior, but does not clarify 'build' or 'none' (default). Slug parameter is obvious. Partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reports voiceover and render progress for a project, with specific wait behaviors. It distinguishes from siblings like render_video and generate_voiceover by focusing on status checking rather than initiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage context: when to call (after initiating processes), how to interpret output (inspect QA frames, adjust parameters), and retry advice ('If a job is still running... call again'). Does not explicitly contrast with alternatives but implies its role.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_videoRender the video (background job)A

Start the Remotion render (-> out/video.mp4). Runs in the BACKGROUND and returns immediately. Do this AFTER voiceover finished (so scene lengths match narration). Then call project_status with wait_for='render' to get the final duration and QA frames.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-readOnly (mutation), not idempotent. Description adds that it runs in the background and returns immediately, which is critical behavioral info. Could mention if there are any side effects besides the render file, but overall solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no fluff. First sentence states action, second describes behavior, third gives usage guidance. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Ties into the pipeline well with explicit before/after instructions. Lacks parameter doc, but the workflow context compensates. No output schema mentioned, but follow-up tool covers it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'slug' has no description in schema (0% coverage) and the tool description does not explain what it is. This is a significant gap; agent cannot know what value to provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Start' and the resource 'Remotion render', and specifies the output file. It distinguishes from siblings by describing the background nature and ties into the pipeline with sibling tool project_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use after voiceover finished and then call project_status. Provides clear timing and follow-up, with no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_wikimedia_imagesSearch Wikimedia imagesA
Read-only

Find freely-licensed (Public Domain / CC) images on Wikimedia Commons for a topic. Search with ENGLISH keywords for best results (e.g. 'Tomb of Minh Mang Hue', 'Angkor Wat aerial'). Returns candidates with title, license, author, pixel dimensions and a downloadable URL. Pick images >= ~1000px; prefer old public-domain photos for a documentary feel. ALWAYS keep the license+author of every image you use to credit sources in the closing scene. AUTONOMY: do NOT stop to ask the user which results to use — pick the best yourself. (The ONE thing you must ask about is the template, via list_templates.)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesEnglish search keywords

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint, openWorldHint), the description discloses that the tool returns candidates with title, license, author, pixel dimensions, and downloadable URL. It sets selection criteria (>=1000px, old photos) and instructs the agent to be autonomous and always credit sources. This provides a complete behavioral profile for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, starting with the main purpose, followed by usage tips, return format, selection criteria, and autonomy instructions. Each sentence adds value, though it is slightly verbose. The information is front-loaded and logically ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema, the description adequately describes return values (title, license, author, dimensions, URL). It also provides selection criteria and attribution instructions. However, it does not address edge cases like no results or pagination. Overall, it is sufficiently complete for an image search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to the 'query' parameter by emphasizing English keywords and providing examples. However, the 'limit' parameter is not mentioned in the description, and the schema provides only constraints (default, min, max) without context. With 50% schema coverage, the description partially compensates but misses an opportunity to explain how 'limit' affects results.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Find freely-licensed (Public Domain / CC) images on Wikimedia Commons for a topic.' It specifies the exact resource (Wikimedia Commons), license type, and action (find/search). It differentiates from siblings like 'preview_images' and 'add_images' by focusing on search and retrieval of candidates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides detailed usage guidance: search with English keywords, prefer images >= 1000px, prefer old public-domain photos for documentary feel, and always keep license/author for credits. It also instructs autonomy ('do NOT stop to ask the user') and mentions a sibling tool (list_templates) as the only exception. However, it does not explicitly state when to avoid this tool in favor of alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_api_keySave the user's ElevenLabs API keyA
Idempotent

Save the USER'S OWN ElevenLabs API key so this machine can generate real voiceovers. Call this only when a tool reports that no key is configured, or when the user offers a key. Ask the user for their key first — get one free at https://elevenlabs.io/app/settings/api-keys — and NEVER invent one. The key is written to ~/.config/video-studio/config.json with 0600 permissions and never leaves this machine. Alternative for users who prefer not to type a key into chat: put ELEVENLABS_API_KEY in the 'env' block of their MCP client config instead; that always wins over the saved file. Call with no arguments to just report where the current key comes from.

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyNothe user's ElevenLabs API key; omit to only check current status

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds significant behavioral context beyond annotations: writes to specific file with restricted permissions, never leaves the machine, idempotent behavior confirmed by noting calling with no args just checks status. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is reasonably concise given the detail needed. Front-loaded with primary action, then usage conditions, security, alternatives. Each sentence serves a purpose, though slightly lengthy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a key-setter tool: explains security, alternative config, and status-check behavior. No output schema needed as side-effect is clear. Sibling tools (like generate_voiceover) likely depend on this key, making context sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already covers the single optional parameter (api_key) with description 'omit to only check current status'. Description restates this but doesn't add new semantic meaning beyond the schema. Baseline 3 for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool saves the user's ElevenLabs API key for generating voiceovers. Distinguishes itself from sibling tools by being the only one handling API key configuration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-call: only when a tool reports no key or user offers one. Instructs to ask user and never invent. Offers alternative environment variable setup, giving complete usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

template_schemaGet one template's content.json schemaA
Read-only

Return the content.json schema, scene outline and hard rules for ONE template. Call this after the user picked a template, before writing any content. Each template has its OWN scene types — do not reuse another template's shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
templateYestemplate id from list_templates

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and openWorldHint=false. The description adds that it returns a scene outline and hard rules, which are behavioral details beyond the annotations. It does not mention any destructive actions, which aligns with readOnlyHint. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no extraneous information. The first sentence states the outcome concisely, and the second provides usage context. Very efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple input (one parameter), good annotations, and no output schema, the description fully covers when to use, what it returns, and a critical warning. It is complete for the tool's purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the parameter 'template' described as 'template id from list_templates'. The description does not add further semantics beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns the content.json schema, scene outline, and hard rules for ONE template. It uses specific verbs ('Return', 'Get') and resources ('content.json schema', 'scene outline', 'hard rules'), and the title reinforces this. The instruction to call it after the user picks a template and before writing content distinguishes it from sibling tools like list_templates or write_content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'Call this after the user picked a template, before writing any content.' Also provides a clear exclusion: 'Each template has its OWN scene types — do not reuse another template's shape.' This guides the agent on proper sequencing and prevents misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_contentWrite content.json (storyboard)A
Idempotent

Write the video storyboard to /content.json. Pass the COMPLETE JSON as a string. Schema: meta{fps:30,width:1080,height:1920,accent,accentSoft,voice:false} and scenes[] where each scene has id, type ('title'|'photo'|'timeline'|'closing'), dur, voiceover (1-2 sentences in the target language), image ('images/..'), focalX/focalY. title{kicker,title,subtitle}; photo{year,headline,caption}; timeline{title,items:[{year,text}]}; closing{title,note,cta}. Vietnamese: DO NOT write ALL-CAPS text with hook-accent letters (Ỷ/Ủ/Ổ/Ả/Ẩ) in 'year' badges; use numbers or hook-free words. Facts must be accurate; credit image sources in closing 'note'.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes
content_jsonYesthe full content.json as a JSON string

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations: it specifies the required structure, constraints on Vietnamese text, and factual accuracy. The idempotentHint true is consistent; no contradictions. It could mention that it will overwrite existing content.json but is idempotent per annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is fairly long but well-structured: purpose first, then schema breakdown, then special rules. Every sentence adds value, but it could be slightly more concise by grouping rules more tightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given only 2 parameters and no output schema, the description covers the input format extensively, including edge cases (Vietnamese ALL-CAPS). It lacks some details like whether partial writes are allowed, but likely sufficient for an agent with idempotentHint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The parameter 'slug' has no description in schema, but the description compensates by clearly explaining its usage in the path. 'content_json' is fully detailed in the description with schema, internationalization rules, and accuracy requirements, far exceeding the minimal schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Write' and the resource 'the video storyboard to <project>/content.json'. It distinguishes itself from sibling tools like 'preview_images' or 'generate_voiceover' by specifying its exact output file and format.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly tells when to use this tool (to write the storyboard) through its clear purpose. However, it does not explicitly mention when not to use it or describe alternatives, which would be helpful given the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_publish_metaWrite title, description & hashtagsA
Idempotent

FINAL STEP, right after the render is done: save the publishing copy for the video — a hook title, a description, and hashtags. Write them in the SAME language as the voiceover, from the video's real content (do not promise anything the video does not show). title: <= 100 chars, one strong hook. description: 2-4 sentences — what the viewer gets, plus image credits (author + license) when the images are CC-BY/CC-BY-SA. hashtags: 5-12, each ONE word (no spaces), mixing broad tags with topic-specific ones. Saves /publish.json + a copy-paste ready /publish.txt, and returns the text so you can show it to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes
titleYeshook title, same language as the voiceover
hashtagsYese.g. ['#lichsu','#hue'] — leading '#' optional, one word each
descriptionYes2-4 sentences; include image credits when required by the license

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it as idempotent but not read-only. The description adds that it saves two files and returns the text for display, which informs the agent about side effects. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is textually efficient, front-loading the positioning information ('FINAL STEP'). It uses a structured bullet-like format for parameters. A slight reorganisation could improve readability slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the tool and the absence of an output schema, the description covers the main behavioral aspects (file saving, return value) and usage constraints. The missing explanation of the 'slug' parameter is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the description adds meaningful constraints beyond the schema for title, description, and hashtags (e.g., character limits, sentence count, image credit requirements). However, the 'slug' parameter is not explained in the description, leaving a gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: saving publishing copy (title, description, hashtags) as the final step after rendering. It distinguishes this from sibling tools like 'write_content' which write the script content earlier in the pipeline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly indicates this is the final step after rendering, providing clear timing. It also gives constraints like language matching and content truthfulness, but does not explicitly list alternatives or when not to use.

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. Dates show when Glama detected each change.

  1. 13 tool updatesv2.1.0
    • First observedadd_images
    • First observedcreate_video
    • First observedgenerate_voiceover
    • First observedlist_templates
    • First observednew_video_project
    • First observedpreview_images
    • First observedproject_status
    • First observedrender_video
    • First observedsearch_wikimedia_images
    • First observedset_api_key
    • First observedtemplate_schema
    • First observedwrite_content
    • First observedwrite_publish_meta

TDQS

A4.3/5.0
Disambiguation4/5

Most tools are clearly distinct. The minor overlap is between create_video (one-shot builder) and the individual step tools (new_video_project, add_images, write_content, etc.) but descriptions make the two workflows clear.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., list_templates, search_wikimedia_images, write_content) with no mixing of conventions.

Tool Count5/5

13 tools is appropriate for a video creation server, covering setup, template selection, asset sourcing, project creation, generation, and publishing without excess.

Completeness4/5

Covers the full video creation pipeline from key setup to final publish metadata. Minor gaps: no tool to list existing projects or edit content incrementally, but the core workflow is complete.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sexybells/video-studio-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server