Integrates with Amazon's Nova Reel 1.1 video generation service through AWS Bedrock, enabling asynchronous video creation with customizable parameters like duration, FPS, and dimensions.
Includes a Buy Me A Coffee button in the README for supporting the developer.
Offers ready-to-use Docker containers for all transport methods (stdio, SSE, HTTP Streaming).
Supports configuration through .env files for setting AWS credentials and other configuration parameters.
Provides pre-built Docker container images through GitHub Container Registry for easy deployment.
Provides a Python package that can be installed locally or run with tools like uvx.
Click on "Install 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., "@Amazon Nova Reel MCP Serverstart a 30-second video of a sunset over mountains with birds flying"
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.
Amazon Nova Reel 1.1 MCP Server
A Model Context Protocol (MCP) server for Amazon Nova Reel 1.1 video generation using AWS Bedrock. This server provides tools for asynchronous video generation with comprehensive prompting guidelines and both stdio and SSE transport support.

Features
Asynchronous Video Generation: Start, monitor, and retrieve video generation jobs
Multiple Transport Methods: Support for stdio, Server-Sent Events (SSE), and HTTP Streaming
Comprehensive Prompting Guide: Built-in guidelines based on AWS documentation
Docker Support: Ready-to-use Docker containers for all transport methods
AWS Integration: Full integration with AWS Bedrock and S3
Related MCP server: AWS Knowledge Base Retrieval MCP Server
Available Tools
1. start_async_invoke
Start a new video generation job.
Parameters:
prompt(required): Text description for video generationduration_seconds(optional): Video duration (12-120 seconds, multiples of 6, default: 12)fps(optional): Frames per second (default: 24)dimension(optional): Video dimensions (default: "1280x720")seed(optional): Random seed for reproducible resultstask_type(optional): Task type (default: "MULTI_SHOT_AUTOMATED")
Returns: Job details including job_id, invocation_arn, and estimated video URL.
2. list_async_invokes
List all tracked video generation jobs with their current status.
Returns: Summary of all jobs with status counts and individual job details.
3. get_async_invoke
Get detailed information about a specific video generation job.
Parameters:
identifier(required): Eitherjob_idorinvocation_arn
Returns: Detailed job information including video URL when completed.
4. get_prompting_guide
Get comprehensive prompting guidelines for effective video generation.
Returns: Detailed prompting best practices, examples, and templates.
Installation
Prerequisites
Python 3.8+
AWS Account with Bedrock access
S3 bucket for video output
AWS credentials with appropriate permissions
Local Installation
Clone or download the server files
Install dependencies:
pip install -e .Docker Installation
Using Pre-built Images (Recommended)
Pull multi-architecture images from GitHub Container Registry:
# STDIO version
docker pull ghcr.io/mirecekd/novareel-mcp:latest-stdio
# SSE version
docker pull ghcr.io/mirecekd/novareel-mcp:latest-sse
# HTTP Streaming version
docker pull ghcr.io/mirecekd/novareel-mcp:latest-httpBuilding Locally
Build containers using provided scripts:
# Build all versions
./build-all.sh
# Or build individual versions
./build-stdio.sh # STDIO version
./build-sse.sh # SSE version
./build-http.sh # HTTP Streaming versionOr use docker-compose:
docker-compose up -dOr use the quick start script:
# Build all images
./start.sh build
# Build specific version
./start.sh build-stdio
./start.sh build-sse
./start.sh build-httpConfiguration
Environment Variables
AWS_ACCESS_KEY_ID: Your AWS access key IDAWS_SECRET_ACCESS_KEY: Your AWS secret access keyAWS_REGION: AWS region (default: us-east-1)S3_BUCKET: S3 bucket name for video output
.env File Example
Create a .env file for docker-compose:
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
AWS_REGION=us-east-1
S3_BUCKET=my-video-generation-bucketUsage
MCP Client Integration (Cline/Claude Desktop)
Add the server to your MCP client configuration:
Cline Configuration
Add to your Cline MCP settings:
{
"mcpServers": {
"Nova Reel Video MCP": {
"disabled": false,
"timeout": 60,
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/mirecekd/novareel-mcp:latest-stdio",
"--aws-access-key-id",
"YOUR_AWS_ACCESS_KEY_ID",
"--aws-secret-access-key",
"YOUR_AWS_SECRET_ACCESS_KEY",
"--s3-bucket",
"YOUR_S3_BUCKET_NAME"
]
}
}
}Claude Desktop Configuration
Add to your Claude Desktop claude_desktop_config.json:
{
"mcpServers": {
"novareel-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/mirecekd/novareel-mcp:latest-stdio",
"--aws-access-key-id",
"YOUR_AWS_ACCESS_KEY_ID",
"--aws-secret-access-key",
"YOUR_AWS_SECRET_ACCESS_KEY",
"--s3-bucket",
"YOUR_S3_BUCKET_NAME"
]
}
}
}Alternative: Local Python Installation
If you prefer running without Docker:
{
"mcpServers": {
"novareel-mcp": {
"command": "uvx",
"args": [
"--from", "git+https://github.com/mirecekd/novareel-mcp.git",
"novareel-mcp-server",
"--aws-access-key-id", "YOUR_AWS_ACCESS_KEY_ID",
"--aws-secret-access-key", "YOUR_AWS_SECRET_ACCESS_KEY",
"--s3-bucket", "YOUR_S3_BUCKET_NAME"
]
}
}
}Important: Replace the placeholder values with your actual AWS credentials and S3 bucket name.
Running with uvx (Recommended)
# First build the package
./build.sh
# Then run from wheel file
uvx --from ./dist/novareel_mcp-1.0.0-py3-none-any.whl novareel-mcp-server --aws-access-key-id YOUR_KEY --aws-secret-access-key YOUR_SECRET --s3-bucket YOUR_BUCKET
# Or from current directory during development (without build)
uvx --from . novareel-mcp-server --aws-access-key-id YOUR_KEY --aws-secret-access-key YOUR_SECRET --s3-bucket YOUR_BUCKET
# Or using start script
./start.sh build-package # Build wheelStdio Version (Direct MCP Client)
# Local execution
python main.py --aws-access-key-id YOUR_KEY --aws-secret-access-key YOUR_SECRET --s3-bucket YOUR_BUCKET
# Docker execution
docker run --rm -i mirecekd/novareel-mcp-server:stdio --aws-access-key-id YOUR_KEY --aws-secret-access-key YOUR_SECRET --s3-bucket YOUR_BUCKETSSE Version (Web Interface)
# Local execution
python -m novareel_mcp_server.server_sse --aws-access-key-id YOUR_KEY --aws-secret-access-key YOUR_SECRET --s3-bucket YOUR_BUCKET --host 0.0.0.0 --port 8000
# Docker execution
docker run -p 8000:8000 -e AWS_ACCESS_KEY_ID=YOUR_KEY -e AWS_SECRET_ACCESS_KEY=YOUR_SECRET -e S3_BUCKET=YOUR_BUCKET mirecekd/novareel-mcp-server:sseThen access http://localhost:8000/sse/ for the SSE endpoint.
HTTP Streaming Version (Bidirectional Transport)
# Local execution
python -m novareel_mcp_server.server_http --aws-access-key-id YOUR_KEY --aws-secret-access-key YOUR_SECRET --s3-bucket YOUR_BUCKET --host 0.0.0.0 --port 8001
# Docker execution
docker run -p 8001:8001 -e AWS_ACCESS_KEY_ID=YOUR_KEY -e AWS_SECRET_ACCESS_KEY=YOUR_SECRET -e S3_BUCKET=YOUR_BUCKET ghcr.io/mirecekd/novareel-mcp:latest-httpThen access http://localhost:8001 for the HTTP streaming transport.
Package Build
To create a distribution package:
# Install build tools
pip install build
# Create package
python3 -m build
# Output files will be in dist/Example Usage
Basic Video Generation
# Start a video generation job
result = start_async_invoke(
prompt="A majestic eagle soars over a mountain valley, camera tracking its flight as it circles above a pristine lake",
duration_seconds=24,
fps=24,
dimension="1920x1080"
)
job_id = result["job_id"]
print(f"Started job: {job_id}")
# Check job status
status = get_async_invoke(job_id)
print(f"Status: {status['status']}")
# When completed, get video URL
if status["status"] == "Completed":
print(f"Video URL: {status['video_url']}")List All Jobs
# Get overview of all jobs
jobs = list_async_invokes()
print(f"Total jobs: {jobs['total_invocations']}")
print(f"Completed: {jobs['summary']['completed']}")
print(f"In progress: {jobs['summary']['in_progress']}")Prompting Guidelines
The server includes comprehensive prompting guidelines based on AWS documentation. Access them using:
guide = get_prompting_guide()Key Prompting Tips
Be Specific: Use detailed, descriptive language
Good: "A red cardinal perched on a snow-covered pine branch, morning sunlight filtering through the trees"
Bad: "A bird on a tree"
Use Camera Terminology: Control shot composition
"Close-up shot of hands carving wood"
"Wide shot establishing the mountain landscape"
"Camera pans left across the valley"
Include Lighting Details: Specify atmosphere
"Golden hour lighting casting long shadows"
"Soft blue hour twilight"
"Dramatic storm clouds overhead"
Structure for Duration: Match complexity to video length
12-24 seconds: Single action or moment
30-60 seconds: 2-3 distinct actions
60-120 seconds: Full narrative with multiple scenes
Example Prompts by Category
Nature (Short - 12s):
Close-up of morning dew drops on a spider web, with soft sunrise lighting creating rainbow reflectionsUrban (Medium - 30s):
A street musician plays violin in a subway station, commuters pause to listen, coins drop into his case, camera slowly pulls back to reveal the bustling underground scenePortrait (Long - 60s):
Portrait of a chef preparing a signature dish: selecting fresh ingredients at market, returning to kitchen, methodically preparing each component, plating with artistic precision, and presenting the finished masterpieceAWS Permissions
Your AWS credentials need the following permissions:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:StartAsyncInvoke",
"bedrock:GetAsyncInvoke",
"bedrock:ListFoundationModels"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}Video Output
Generated videos are stored in your S3 bucket with the following structure:
s3://your-bucket/
├── job-id-1/
│ └── output.mp4
├── job-id-2/
│ └── output.mp4
└── ...Videos are accessible via HTTPS URLs:
https://your-bucket.s3.region.amazonaws.com/job-id/output.mp4Supported Video Specifications
Duration: 12-120 seconds (must be multiples of 6)
Frame Rate: 24 fps (recommended)
Dimensions:
1280x720 (HD)
Format: MP4
Model: amazon.nova-reel-v1:1
Troubleshooting
Common Issues
AWS Credentials Error
Verify your AWS credentials are correct
Ensure your account has Bedrock access enabled
Check IAM permissions
S3 Bucket Access
Verify bucket exists and is accessible
Check bucket permissions
Ensure bucket is in the same region as Bedrock
Duration Validation
Duration must be 12-120 seconds
Must be a multiple of 6
Valid values: 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96, 102, 108, 114, 120
Job Not Found
Use
list_async_invokesto see all tracked jobsJobs are stored in memory and lost on server restart
For production, implement persistent storage
Debug Mode
Enable debug logging by setting environment variable:
export PYTHONUNBUFFERED=1Development
Project Structure
novareel-mcp-server/
├── main.py # Main MCP server (stdio)
├── main_sse.py # SSE version of MCP server
├── main_http.py # HTTP Streaming version of MCP server
├── prompting_guide.py # AWS prompting guidelines
├── pyproject.toml # Python dependencies
├── Dockerfile.stdio # Docker for stdio version
├── Dockerfile.sse # Docker for SSE version
├── Dockerfile.http # Docker for HTTP streaming version
├── docker-compose.yml # Container orchestration
└── README.md # This documentationContributing
Fork the repository
Create a feature branch
Make your changes
Test with all transport versions (stdio, SSE, HTTP streaming)
Submit a pull request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
For issues and questions:
Check the troubleshooting section
Review AWS Bedrock documentation
Open an issue in the repository