Skip to main content
Glama
imyousuf

storytelling-media-mcp

by imyousuf

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-image also described by Google as Nano Banana 2.

  • pro: gemini-3-pro-image also described by Google as Nano Banana Pro.

  • legacy_flash: gemini-2.5-flash-image for 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 .env

FFmpeg 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_mcp

The 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_mcp

MCP 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-media

Codex:

codex plugin marketplace add imyousuf/storytelling-media-mcp --sparse .agents/plugins --sparse plugins

Then 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 tools
nano_banana_generate_imageB

Generate or edit an image with Google's Nano Banana Gemini image models.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoflash
promptYes
auth_modeNoauto
output_pathYes
user_projectNo
reference_image_pathsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
reencodeNo
input_pathsYes
output_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoveo-3.1-generate-001
promptYes
auth_modeNoauto
image_pathNo
resolutionNo720p
output_pathYes
aspect_ratioNo16:9
user_projectNo
last_frame_pathNo
timeout_secondsNo
duration_secondsNo
poll_interval_secondsNo
reference_image_pathsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.3/5.0
Behavior1/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 3 tool updatesv0.2.3
    • First observednano_banana_generate_image
    • First observedstitch_videos
    • First observedveo_generate_video

TDQS

B3.2/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: image generation, video generation, and video stitching. No overlap or ambiguity between them.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers