RunwayML Luma AI 视频生成器
STDIO用于视频生成的AI接口工具
用于视频生成的AI接口工具
This MCP server provides tools to interact with the RunwayML and Luma AI APIs for video and image generation tasks.
enhance_prompt
tool)runwayml-mcp-server
).npm install
.env
file: In the server's root directory, create a file named .env
..env
file:
Replace the placeholder values with your actual keys.RUNWAYML_API_SECRET=your_runwayml_api_secret_here LUMAAI_API_KEY=your_luma_api_key_here OPENROUTER_API_KEY=your_openrouter_api_key_here
npm run build
You should see a message likenpm start
RunwayML MCP server running on stdio
in your terminal's error output (stderr).Configure your MCP client to connect to this server. The exact steps depend on the client, but you'll typically need to provide:
runway-luma-server
)node
/path/to/your/runwayml-mcp-server/build/server-index.js
)RUNWAYML_API_SECRET
: Your RunwayML API SecretLUMAAI_API_KEY
: Your Luma AI API KeyOPENROUTER_API_KEY
: Your OpenRouter API KeyExample Configuration (Conceptual):
{ "mcpServers": { "runway-luma-server": { "command": "node", "args": ["/full/path/to/runwayml-mcp-server/build/server-index.js"], "env": { "RUNWAYML_API_SECRET": "your_runwayml_api_secret_here", "LUMAAI_API_KEY": "your_luma_api_key_here", "OPENROUTER_API_KEY": "your_openrouter_api_key_here" }, "disabled": false, "autoApprove": [] } } }
(Remember to replace /full/path/to/
with the actual path on your system)
generate_text_to_video
: Generates video from text.
provider
: (Optional) runwayml
(default) or lumaai
.promptText
: (Required) The text prompt.runway_model
: (Optional) Runway model (e.g., "gen-2").runway_resolution
: (Optional) Runway resolution (1280:768
or 768:1280
).runway_watermark
: (Optional) Boolean, default false
.luma_model
: (Optional) Luma model (ray-flash-2
, ray-2
(default), ray-1-6
).luma_aspect_ratio
: (Optional) Luma aspect ratio (e.g., 16:9
(default), 1:1
).luma_loop
: (Optional) Boolean.duration
: (Optional) Video duration in seconds (number).seed
: (Optional) Generation seed (number).generate_image_to_video
: Generates video from an image.
provider
: (Optional) runwayml
(default) or lumaai
.promptImage
: (Required) URL of the input image, or for Runway, an array [{uri: "url", position: "first" | "last"}]
.promptText
: (Optional) Text prompt to accompany the image.runway_model
: (Optional) Runway model (gen3a_turbo
(default)).runway_duration
: (Optional) Runway duration (5
(default) or 10
).runway_ratio
: (Optional) Runway resolution (1280:768
or 768:1280
).runway_watermark
: (Optional) Boolean, default false
.luma_model
: (Optional) Luma model (ray-flash-2
, ray-2
(default), ray-1-6
).luma_aspect_ratio
: (Optional) Luma aspect ratio (e.g., 16:9
(default)).luma_loop
: (Optional) Boolean.seed
: (Optional) Generation seed (number).enhance_prompt
: Refines a prompt using OpenRouter.
original_prompt
: (Required) The prompt to enhance.model
: (Optional) OpenRouter model name (defaults to a capable model like anthropic/claude-3.5-sonnet
).instructions
: (Optional) Specific instructions for the enhancement.luma_generate_image
: Generates an image using Luma AI.
prompt
: (Required) Text prompt.aspect_ratio
: (Optional) Luma aspect ratio (16:9
(default)).model
: (Optional) Luma image model (photon-1
(default), photon-flash-1
).image_ref
: (Optional) Array of image reference objects ({url: string, weight?: number}
). Max 4.style_ref
: (Optional) Array of style reference objects ({url: string, weight?: number}
). Max 1.character_ref
: (Optional) Character reference object ({ identity0: { images: [url1, ...] } }
).modify_image_ref
: (Optional) Modify image reference object ({url: string, weight?: number}
).luma_list_generations
: Lists previous Luma AI generations.
limit
: (Optional) Number of results (default 10).offset
: (Optional) Offset for pagination (default 0).luma_get_generation
: Gets details for a specific Luma AI generation.
generation_id
: (Required) UUID of the generation.luma_delete_generation
: Deletes a specific Luma AI generation.
generation_id
: (Required) UUID of the generation.luma_get_camera_motions
: Lists supported camera motions for Luma AI prompts. (No parameters).luma_add_audio
: Adds audio to a Luma generation.
generation_id
: (Required) UUID of the generation.prompt
: (Required) Prompt for the audio.negative_prompt
: (Optional) Negative prompt for audio.luma_upscale
: Upscales a Luma generation.
generation_id
: (Required) UUID of the generation.resolution
: (Optional) Target resolution (1080p
(default) or 4k
).(Note: For tools involving generation (generate_*
, luma_upscale
), the server initiates the task and returns immediately. Progress updates and the final result URL will be sent via MCP progress notifications.)
Here are examples of how to combine the server's tools for common use cases:
Goal: Create a 5-second cyberpunk noir video clip for the lyric "Neon rivers flowing through a city of chrome".
Steps:
Generate Base Image (Luma):
{ "tool_name": "luma_generate_image", "arguments": { "prompt": "Overhead shot of a dark, rainy cyberpunk city street at night. Bright neon signs reflect on wet pavement, resembling rivers of light flowing between towering chrome skyscrapers. Film noir aesthetic, photorealistic.", "aspect_ratio": "16:9" } }
(Wait for image generation to complete and get the image URL)
Animate Image (Luma):
{ "tool_name": "generate_image_to_video", "arguments": { "provider": "lumaai", "promptImage": "{IMAGE_URL_FROM_STEP_1}", "promptText": "Slow pan left across the rainy cyberpunk cityscape, neon lights flickering subtly.", "luma_aspect_ratio": "16:9", "duration": 5 } }
(Wait for video generation to complete)
Goal: Create a 5-second video showing a futuristic earbud floating in a minimalist environment.
Steps:
Generate Scene with Product Reference (Luma):
{ "tool_name": "luma_generate_image", "arguments": { "prompt": "A single, sleek futuristic wireless earbud floats weightlessly in the center of a bright, minimalist white room with soft, diffused ambient light. Zero gravity effect.", "aspect_ratio": "1:1", "image_ref": [{ "url": "{PRODUCT_IMAGE_URL}", "weight": 0.8 }] } }
(Wait for image generation to complete and get the image URL)
Animate Scene (Luma):
{ "tool_name": "generate_image_to_video", "arguments": { "provider": "lumaai", "promptImage": "{IMAGE_URL_FROM_STEP_1}", "promptText": "The earbud slowly rotates and drifts gently in zero gravity.", "luma_aspect_ratio": "1:1", "duration": 5 } }
(Wait for video generation to complete)
Goal: Animate an existing image using RunwayML's Gen3a model.
Steps:
luma_generate_image
if you don't have an image.(Wait for video generation to complete){ "tool_name": "generate_image_to_video", "arguments": { "provider": "runwayml", "promptImage": "{YOUR_IMAGE_URL}", "promptText": "Subtle zoom in, cinematic lighting.", "runway_model": "gen3a_turbo", "runway_duration": "5", "runway_ratio": "1280:768" // Or "768:1280" } }