storytelling-media-mcp
Click on "Deploy 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., "@storytelling-media-mcpGenerate a 5-second video of a sunset over mountains."
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.
Storytelling Media MCP
MCP tools for an agent-driven video creation workflow.
This server gives Codex, Claude Code, or another MCP client access to:
Nano Banana image generation and editing through Google's GenAI SDK.
Veo 3.1 video generation through Google's GenAI SDK.
Local video stitching through FFmpeg.
Models
Image generation defaults to the newer Google image models:
flash:gemini-3.1-flash-imagealso described by Google as Nano Banana 2.pro:gemini-3-pro-imagealso described by Google as Nano Banana Pro.legacy_flash:gemini-2.5-flash-imagefor older Nano Banana workflows.
Video generation defaults to:
veo-3.1-generate-001
Related MCP server: Sora 2 MCP Server
Setup
python -m venv .venv
. .venv/bin/activate
pip install -e .
cp .env.template .envFFmpeg must be installed and available on PATH for stitching.
ADC Instead of API Key
The Gemini API can also use OAuth/ADC, but the ADC login must include Google's Gemini scope:
gcloud auth application-default login \
--scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.retriever'
gcloud auth application-default set-quota-project "$GOOGLE_CLOUD_PROJECT"Then run the MCP server with GOOGLE_CLOUD_PROJECT set to the project that should be used for quota and billing:
python -m storytelling_mcpThe server also accepts GOOGLE_CLOUD_QUOTA_PROJECT or GCLOUD_PROJECT. Then call the image or video tools with auth_mode="adc". If your ADC token was created without the generative-language.retriever scope, the Gemini API returns ACCESS_TOKEN_SCOPE_INSUFFICIENT.
Run
python -m storytelling_mcpMCP Client Config
Example stdio server config using an API key:
{
"mcpServers": {
"storytelling-media": {
"command": "python",
"args": ["-m", "storytelling_mcp"],
"env": {
"GEMINI_API_KEY": "your_api_key"
}
}
}
}Example stdio server config using ADC/Vertex:
{
"mcpServers": {
"storytelling-media": {
"command": "python",
"args": ["-m", "storytelling_mcp"],
"env": {
"GOOGLE_CLOUD_PROJECT": "your-gcp-project-id",
"GOOGLE_CLOUD_LOCATION": "us-central1"
}
}
}
}Agent Plugins
This repo includes installable plugin metadata for both Claude Code and Codex.
Claude Code:
/plugin marketplace add imyousuf/storytelling-media-mcp
/plugin install storytelling-media-mcp@storytelling-mediaCodex:
codex plugin marketplace add imyousuf/storytelling-media-mcp --sparse .agents/plugins --sparse pluginsThen open /plugins in Codex and install storytelling-media-mcp from the storytelling-media marketplace.
The plugin launcher uses STORYTELLING_MEDIA_MCP_ROOT for local development. If that variable is unset, it creates a plugin-local virtual environment and installs this package from GitHub before starting the MCP server.
The plugin also includes $movie-production-pipeline, a gated multi-agent workflow for turning a director's brief into stage-approved production artifacts. It expects user feedback at each stage before moving forward.
Tools
nano_banana_generate_image: text-to-image or text-and-image-to-image.veo_generate_video: text-to-video, image-to-video, interpolation, or reference-image-guided generation.stitch_videos: concatenate local MP4 clips with FFmpeg.
Generated files are written to paths supplied by the caller.
Available Tools
3 toolsnano_banana_generate_imageB
Generate or edit an image with Google's Nano Banana Gemini image models.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | flash | |
| prompt | Yes | ||
| auth_mode | No | auto | |
| output_path | Yes | ||
| user_project | No | ||
| reference_image_paths | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the core dual function (generate or edit) but does not mention authentication, output behavior, side effects, rate limits, or reference-image handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It immediately communicates the action and resource, making it highly scannable and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the tool is complex (6 parameters, auth modes, model choices, reference images) and the description is too terse to support correct invocation. It omits guidance on model selection, authentication, and use of reference images for editing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not mention any of the 6 parameters. It does not compensate for the lack of documentation around prompt, output_path, model selection, auth_mode, or reference_image_paths.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Generate or edit an image') tied to a concrete resource ('Google's Nano Banana Gemini image models'). It clearly distinguishes this tool from video-focused siblings like veo_generate_video and stitch_videos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for image generation/editing vs video tools, but it does not explicitly state when to use this tool or its alternatives. No exclusions or conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stitch_videosA
Stitch local video files into one output file with FFmpeg.
| Name | Required | Description | Default |
|---|---|---|---|
| reencode | No | ||
| input_paths | Yes | ||
| output_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only mentions 'with FFmpeg', giving a minor implementation hint, but does not explain whether files are re-encoded by default, what happens with incompatible formats, whether output files are overwritten, or any system requirements. This lack of detail is a significant gap for a tool that manipulates video files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that conveys the core action without any redundant or filler content. It is appropriately front-loaded and every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and schema descriptions, the description should provide comprehensive context. It does not cover important aspects such as how the stitching works (e.g., concat vs. re-encoding), potential failure modes, codec/format compatibility, or prerequisites like FFmpeg installation. The presence of an output schema is acknowledged in the signals, but the description still leaves critical gaps for a tool with multiple parameters and complex behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides some context for 'input_paths' (local video files) and 'output_path' (output file) but says nothing about the 'reencode' parameter or its impact. Key details about expected formats, ffmpeg-specific flags, or constraints are entirely absent, leaving the agent to guess at parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Stitch') and resource ('local video files') and output ('one output file'). It distinctly differs from the sibling generation tools, which create new media rather than assemble existing files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for merging existing local video files, in contrast to the generation-focused siblings. However, it does not explicitly state when to use it over alternatives or mention any exclusion criteria, such as codec compatibility requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
veo_generate_videoC
Generate a video with Google's Veo 3.1 Gemini API.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | veo-3.1-generate-001 | |
| prompt | Yes | ||
| auth_mode | No | auto | |
| image_path | No | ||
| resolution | No | 720p | |
| output_path | Yes | ||
| aspect_ratio | No | 16:9 | |
| user_project | No | ||
| last_frame_path | No | ||
| timeout_seconds | No | ||
| duration_seconds | No | ||
| poll_interval_seconds | No | ||
| reference_image_paths | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it simply restates the tool's function. It does not mention the asynchronous/polling nature, duration limits, cost implications, authentication needs, or that the video is saved to an output path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it is under-specified for a tool with 13 parameters and no other documentation. It lacks structured information or important front-loaded context (e.g., long-running operation behavior).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite a rich input schema, the description gives no contextual guidance on how to invoke the tool correctly. It does not mention return values, error handling, or the operational workflow (e.g., polling until video ready). The tool is complex, but the description is extremely incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides zero additional context for the 13 parameters, and schema description coverage is 0%. It does not explain key details like how `image_path`, `last_frame_path`, or `reference_image_paths` affect generation, nor the meaning of `auth_mode`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Generate a video') and the specific resource ('Google's Veo 3.1 Gemini API'). It distinguishes the tool from siblings: `nano_banana_generate_image` generates images, `stitch_videos` stitches existing videos, but this generates videos from scratch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives. It implies use when generating a video, but there is no mention of prerequisites (e.g., API key), typical scenarios, or exclusions compared to sibling tools.
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.
3 tool updates
v0.2.3- First observed
nano_banana_generate_image - First observed
stitch_videos - First observed
veo_generate_video
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: image generation, video generation, and video stitching. No overlap or ambiguity between them.
The first two tools follow a 'model_verb_object' pattern, while the third uses a simpler 'verb_object' pattern. This is a minor deviation, but the names remain predictable and readable.
Three tools cover the core media generation and stitching workflows. The count is on the low side but each tool serves a distinct, necessary function without being overly sparse.
The toolkit covers image generation, video generation, and video stitching, which are fundamental for storytelling media. Minor gaps exist, such as missing audio generation or video editing, but the core generation-to-assembly flow is well represented.
Maintenance
Related MCP Connectors
- RendobarOAuthcom.rendobar
Transform video, audio and images, and generate media from prompts. FFmpeg, captions, models.
FFmpeg as a service for AI agents: typed video editing tools, async jobs, downloadable outputs.
LLM chat, text tools, image generation, editing, batch image jobs, and asynchronous video generation
AI image + video generation for agents: --flag prompt DSL, async generate/poll, x402 pay-per-use.
1611
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides tools to interact with RunwayML and Luma AI APIs for video and image generation, including text-to-video, image-to-video, prompt enhancement, and management of generations.17-
- AlicenseAqualityDmaintenanceEnables video generation through OpenAI's Sora 2 API, allowing users to create, monitor, and manage AI-generated videos. It also provides tools for merging video clips and creating fade animations from static images using FFmpeg.67 npm2MIT
- AlicenseAqualityDmaintenanceProvides video and audio manipulation tools powered by FFmpeg, enabling AI assistants to perform media operations such as cutting, converting, and removing silence.652 npm2MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to generate narrated videos from topics or scripts, with stock footage, home videos, or local AI clips.2MIT