An MCP (Model Context Protocol) server for AI-powered media generation. Generate images, videos, music, sound effects, speech, and subtitles directly from Claude or any MCP-compatible client.
All generated files save to public/ — ready for Remotion's staticFile() or any other use.
npm install -g remotion-media-mcpIf installed globally or via npx:
claude mcp add remotion-media \
-e KIE_API_KEY=your-api-key \
-- npx remotion-media-mcpIf cloned and built locally:
claude mcp add remotion-media \
-e KIE_API_KEY=your-api-key \
-- node /path/to/remotion-media-mcp/dist/index.jsWith optional Airtable asset tracking:
claude mcp add remotion-media \
-e KIE_API_KEY=your-api-key \
-e AIRTABLE_API_KEY=your-airtable-pat \
-e AIRTABLE_BASE_ID=appXXX \
-e AIRTABLE_TABLE_NAME=Assets \
-- npx remotion-media-mcpBy default this adds at user scope (
-s user). Add-s projectto scope it to the current project only.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"remotion-media": {
"command": "npx",
"args": ["remotion-media-mcp"],
"env": {
"KIE_API_KEY": "your-api-key-here"
}
}
}
}{
"mcpServers": {
"remotion-media": {
"command": "npx",
"args": ["remotion-media-mcp"],
"env": {
"KIE_API_KEY": "your-api-key-here"
}
}
}
}Get a KIE_API_KEY from kie.ai — sign up and grab your key from the dashboard.
Generate AI images via Nano Banana Pro.
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt |
string | Yes | Text description of the image |
output_name |
string | Yes | Output filename (without extension) |
aspect_ratio |
enum | No | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9, auto |
resolution |
enum | No | 1K, 2K, 4K (default: 1K) |
image_urls |
string[] | No | Reference images (up to 8) |
Text-to-video via Veo 3.1. Creates ~8 second clips.
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt |
string | Yes | Text description of the video |
output_name |
string | Yes | Output filename (without extension) |
model |
enum | No | veo3 (quality) or veo3_fast (speed, default) |
aspect_ratio |
enum | No | 16:9 (default), 9:16, Auto |
Animate a still image or transition between two images via Veo 3.1.
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt |
string | Yes | Description of the animation |
image_urls |
string[] | Yes | 1-2 image URLs |
output_name |
string | Yes | Output filename (without extension) |
model |
enum | No | veo3 (quality) or veo3_fast (speed, default) |
aspect_ratio |
enum | No | 16:9 (default), 9:16, Auto |
Generate AI music via Suno.
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt |
string | Yes | Description of the music (max 500 chars) |
output_name |
string | Yes | Output filename (without extension) |
instrumental |
boolean | No | Instrumental only, no vocals (default: false) |
model |
enum | No | V3_5, V4, V4_5, V4_5PLUS, V5 (default) |
Generate sound effects via ElevenLabs SFX V2.
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt |
string | Yes | Description of the sound (max 450 chars) |
output_name |
string | Yes | Output filename (without extension) |
duration_seconds |
number | No | Duration 0.5-22 seconds |
loop |
boolean | No | Generate seamless loop (default: false) |
Text-to-speech via ElevenLabs TTS. 21 voices available.
| Parameter | Type | Required | Description |
|---|---|---|---|
text |
string | Yes | Text to convert (max 5000 chars) |
output_name |
string | Yes | Output filename (without extension) |
voice |
enum | No | Default: Eric. Options: Rachel, Aria, Roger, Sarah, Laura, Charlie, George, Callum, River, Liam, Charlotte, Alice, Matilda, Will, Jessica, Eric, Chris, Brian, Daniel, Lily, Bill |
model |
enum | No | multilingual_v2 (quality) or turbo_v2_5 (faster, default) |
stability |
number | No | Voice stability 0-1 (default: 0.5) |
similarity_boost |
number | No | Voice similarity 0-1 (default: 0.75) |
speed |
number | No | Speech speed 0.7-1.2 (default: 1.0) |
Transcribe audio/video to SRT subtitles using local Whisper.
Requires whisper.cpp or OpenAI Whisper:
brew install whisper-cpp # recommended
# or
pip install openai-whisper| Parameter | Type | Required | Description |
|---|---|---|---|
input_file |
string | Yes | Filename in public/ folder |
output_name |
string | No | Output filename without extension |
language |
string | No | Language code e.g., 'en', 'es' (default: auto-detect) |
model |
enum | No | tiny, base (default), small, medium, large |
Browse assets in the Airtable asset library.
| Parameter | Type | Required | Description |
|---|---|---|---|
file_type |
enum | No | Filter: image, video, audio, subtitle, other |
max_records |
number | No | Max records (default: 20, max: 100) |
page_offset |
string | No | Pagination offset |
Back up a local file to the asset library. Assigns an AID and optionally renames with AID prefix.
| Parameter | Type | Required | Description |
|---|---|---|---|
file_path |
string | Yes | Path to local file |
description |
string | Yes | Description of the asset |
file_type |
enum | No | Auto-detected from extension |
remote_url |
string | No | Remote URL instead of uploading |
Pull an asset from the library by AID.
| Parameter | Type | Required | Description |
|---|---|---|---|
aid |
string | Yes | Asset ID (e.g., 'A42') |
target_dir |
string | No | Target: 'assets' (default), 'out', 'public' |
Generated files land in public/ and work directly with staticFile():
import { Img, Video, Audio, staticFile } from "remotion";
<Img src={staticFile("hero.png")} />
<Video src={staticFile("intro.mp4")} />
<Audio src={staticFile("bgm.mp3")} />Connect Airtable to auto-track every generated asset with a unique AID.
- Create an Airtable Personal Access Token with
data.records:read,data.records:write, andcontent:managescopes - Create a base with a table (default name: "Assets") with these fields:
| Field | Type | Notes |
|---|---|---|
AID |
Formula | "A" & {ID} |
ID |
Auto number | |
Filename |
Single line text | |
Description |
Long text | |
File |
Attachment | |
MIME Type |
Single line text | |
Record ID |
Formula | RECORD_ID() |
- Set the env vars:
AIRTABLE_API_KEY,AIRTABLE_BASE_ID, and optionallyAIRTABLE_TABLE_NAME
Without Airtable configured, everything works normally — generation tools save to public/ and asset library tools return a "not configured" message.
git clone https://github.com/stephengpope/remotion-media-mcp.git
cd remotion-media-mcp
npm install
npm run build
# Run locally
KIE_API_KEY=your-key node dist/index.js
# Add your local build to Claude Code
claude mcp add remotion-media \
-e KIE_API_KEY=your-key \
-- node $PWD/dist/index.jsMIT