Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
VIDEO_STUDIO_BASENoBase directory where video projects are created.~/Work/VideoReview
ELEVENLABS_API_KEYNoYour ElevenLabs API key for voiceover. Required on Linux/Windows (macOS can fall back to say command without it). Can also be set via the set_api_key tool after startup.
ELEVENLABS_VOICE_IDNoOverride the default voice globally. Per-template voice in content.json takes precedence.

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
set_api_key

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.

list_templates

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.

template_schema

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.

search_wikimedia_images

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.)

preview_images

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.

new_video_project

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.

add_images

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/'.

write_content

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'.

generate_voiceover

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.

render_video

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.

create_video

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.

project_status

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.

write_publish_meta

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.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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