video-shot-breakdown-mcp
An MCP server for the part of video work that happens before anything is rendered: reading a finished clip as a list of shots, and turning that list back into something you can shoot or generate.
Two tools, no dependencies, standard library only.
Tools
breakdown_shots
Give it a plain-text shot list and it returns the numbers a director actually argues about:
- shot count, total runtime, average / median / shortest / longest shot
- cuts per minute and the pacing bucket (
very fast→slow long take) - camera-movement mix (static, push, dolly, handheld, crane, aerial …)
- frame totals when you pass
fps - a normalised record per shot: description, duration, movement, lens, lighting, start time
Input is loose on purpose — timecodes, inline 3s durations, or freeform lines all parse:
1. 0:00-0:04 Wide establishing shot, slow push in, golden hour
2. 4s handheld close-up on the operator's hands
3. cut to aerial drone shot over the coastline, 6s
build_remake_plan
Takes the same shot list and returns the remake:
- one generator-ready prompt per shot (camera movement + framing + description + lighting + look)
- a camera note for live-action: slider vs. gimbal vs. shoulder mount, and what to keep constant
- clip segmentation — shots longer than
max_clip_seconds(default 10s) are split into generation-sized pieces, so a 24s take becomes 10 + 10 + 4 instead of a failed 24s request text-to-videovsimage-to-videoper shot, decided byhas_reference_still- a clip budget line: "N clips at ≤10s each cover 1:20 of finished runtime"
Install
pip install video-shot-breakdown-mcp
Or run straight from the checkout, without installing:
PYTHONPATH=src python3 -m video_shot_breakdown_mcp
Register with a client
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"video-shot-breakdown": {
"command": "python3",
"args": ["-m", "video_shot_breakdown_mcp"],
"env": { "PYTHONPATH": "/absolute/path/to/video-shot-breakdown-mcp/src" }
}
}
}
Cursor / VS Code MCP (.mcp.json at the project root) uses the same shape:
{
"mcpServers": {
"video-shot-breakdown": {
"command": "video-shot-breakdown-mcp"
}
}
}
Example session
You: break down this shot list and build a remake plan for vertical short-form, 5s clips.
Tool →
build_remake_plan{ "target_aspect_ratio": "9:16", "step_count": 3, "generation_clip_count": 5, "estimated_duration_seconds": 14.0, "pacing": "medium (narrative)", "steps": [ { "shot": 1, "duration": 4.0, "prompt": "camera push, wide framing, wide establishing shot, golden hour lighting, cinematic", "camera_note": "use a slider or gimbal, keep the move the same speed for the whole take; match the wide framing", "generate_with": "text-to-video", "clips": [{ "segment": 1, "seconds": 4.0, "shots": [1] }] } ], "notes": ["generator budget: 5 clips at <= 5s each cover 0:14 of finished runtime"] }
Why not just ask a model to describe the video?
Description is the easy half. The hard half is reproducibility: what lens, what move, what light, and how long each piece may be before a generator starts drifting. This server keeps that as data — JSON you can diff, version, and feed to the next step — instead of prose.
If you want the frame-accurate version against a real video file (camera movement, lighting, and the likely production method per shot, with a remake plan attached), that is what Rea Video does locally on your own footage. This repo is the lighter, API-shaped sibling you can wire into an agent.
Downstream, the plan maps cleanly onto two generators:
- Pavo AI — text-to-video and image-to-video with consistent cast, good for the short-drama shots the plan produces
- Wan 3.0 — cinematic text-to-video / image-to-video, which is where the segmented 5–10s clips go
Tests
PYTHONPATH=src python3 -m unittest discover -s tests -v
License
MIT
Metadata
Release files for video-shot-breakdown-mcp 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| video_shot_breakdown_mcp-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for video_shot_breakdown_mcp-1.0.0-py3-none-any.whl |
Release files / video_shot_breakdown_mcp-1.0.0-py3-none-any.whl
| Download URL | video_shot_breakdown_mcp-1.0.0-py3-none-any.whl |
|---|---|
| Size | 12.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0c04cb9105e7fbc95ef9c0250bde59534ef16d1af30c9ef6b773695615f41a55
|
|
BLAKE2b-256 checksum How to use checksums |
1b9074e7fd04546e1d31c666a467c8e5d6ed94758661edc8a98dd377a07190ce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Security for video-shot-breakdown-mcp 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.