This release is a pre-release and may not be stable for production use.
video-explainer-mcp
Create explainer projects, run pipeline steps, and render videos through MCP. This server wraps the video_explainer CLI with 32 tools for projects, editorial plans, generation, rendering, audio, commentary, narration timing, revision-bound feedback, existing-material assembly, and quality checks. Stock-media search/download tools are not mounted. The upstream checkout owns provider integrations, model selection, Remotion code, and rendering dependencies. The pinned upstream licence grant remains unresolved: this package independently authors the plan contract and ships no upstream code or runtime. Installation and rights for a separate CLI remain operator responsibilities.
Repository links below target the immutable v0.8.0-rc.4 source tag.
This companion's version is 0.2.2rc2. Verify registry availability before
installation. For the exact source and bundled README of a registry version,
use its source archive on
PyPI.
Install and configure
The wrapper requires Python 3.11 or newer and uv. Before generation, install the upstream CLI in its own checkout and virtual environment, following that checkout's instructions. The wrapper expects:
<EXPLAINER_PATH>/.venv/bin/video-explaineras an executable console script.- The Node.js version required by the upstream checkout, plus FFmpeg on
PATH. - Upstream Remotion npm dependencies under
remotion/node_modules/. - Credentials and compatible upstream support for each provider you intend to use.
From this package directory in a source checkout:
uv sync --locked --extra dev
uv run --locked video-explainer-mcp
The command starts a stdio server. Add this entry to your client's mcpServers
configuration, replacing the absolute checkout path:
{
"video-explainer": {
"command": "uv",
"args": [
"run", "--locked", "--directory",
"/absolute/path/to/video-research-mcp/packages/video-explainer-mcp",
"video-explainer-mcp"
]
}
}
After publication of this prepared candidate, register uvx with
video-explainer-mcp==0.2.2rc2. Use the checkout command above until publication
and verify the exact registry archive separately.
The core npm installer does not register this companion or install the upstream
renderer.
Configuration comes from the process environment and
~/.config/video-research-mcp/.env; nonempty process values take precedence:
EXPLAINER_PATH=/absolute/path/to/video_explainer
# Optional: defaults to EXPLAINER_PATH/projects
EXPLAINER_PROJECTS_PATH=/absolute/path/to/projects
EXPLAINER_TTS_PROVIDER=mock
EXPLAINER_TIMEOUT=600
EXPLAINER_RENDER_TIMEOUT=1800
Restart after changing configuration. EXPLAINER_PATH is the checkout root,
not the projects directory. The CLI runs directly without a shell, receives
--projects-dir, and inherits provider credentials while recursive Claude Code
guard variables are removed from its child environment.
Wrapper TTS selectors are mock, elevenlabs, and edge.
The default mock avoids paid TTS; other generation steps can still call paid
providers. A selector is usable only if the upstream CLI supports it and its
credentials are configured. Updating this wrapper does not update that checkout
or add upstream provider support.
The wrapper exposes script refinement and render presets 720p, 1080p, and
4k. These choices match the supported upstream CLI contract. Pipeline steps
remain script, narration, scenes, voiceover, and storyboard.
First project and render
These are MCP calls, made through your client after registration:
-
Create a project:
explainer_create(project_id="my-video")
-
Add source material:
explainer_inject(project_id="my-video", content="...", filename="research.md")
filenamemust be a single filename insideinput/. Injection replaces an existing file with the same name; preserve the original when that matters. -
Authorize generation, then run a bounded step such as
explainer_step(project_id="my-video", step="script"), or useexplainer_generatefor the pipeline. Inspect returned errors and outputs before continuing.force=Truereruns already completed generation steps. -
Read
explainer_statusand inspect the actual generated files. Review and typecheck TSX upstream, then preview scenes before rendering. -
Inspect
explainer_doctor(project_id="my-video")before rendering. It reads local Node/FFmpeg/ffprobe versions, selected Remotion packages and cached browser, the reviewed external source and project paths. It makes no provider call and installs or downloads nothing.all_okmeans technical prerequisites are present; real renderer execution, runtime grants and picture/sound quality remain unverified. -
Start a render with
explainer_render_start(project_id="my-video"). Poll the returnedjob_idwithexplainer_render_polluntilcompletedorfailed. Use blockingexplainer_renderfor a short render.
Render acceptance requires a fresh regular H264 MP4 at the exact selected CLI output
path, requested dimensions, finite duration and a complete FFmpeg decode. The
maximum file size is 512 MiB; probe/decode limits are 10/60 seconds. An unchanged
older video or a different output path cannot satisfy the current request. The
canonical storyboard path must be storyboard/storyboard.json: the selected public
CLI's Node entry ignores configured alternatives. The 720p/4k output is
output/final-720p.mp4/output/final-4k.mp4; 1080p uses paths.final_video, which
must be a direct MP4 in output/; nested/traversal output paths are unsupported.
playability_verified reports full decoding of the exact output bytes. It does
not certify actual Remotion/TTS production or picture, sound, timing and factual
claims. real_renderer_verified remains false. Polling older completed jobs without
a byte-bound decode receipt reports unknown and withholds the output path.
Legacy full generation prepares through storyboard then uses this same render
gate; it bypasses upstream mock rendering and retained-output skipping. Managed
editorial generation still stops at storyboard and renders separately.
Status and recovery
explainer_status reports filesystem observations. A step file's presence does
not establish its validity or publication readiness. Render jobs are durable in
the configured SQLite job store. Restart preserves IDs and receipts; unavailable
process ownership is reported as unknown rather than automatically rerun.
Shutdown cancels and joins active render tasks and stops their CLI subprocesses.
The server prevents concurrent renders of the same project. After a failure, inspect the job error and project output before retrying. Preserve project files when upgrading the wrapper or renderer; they are separate from package installs.
Editorial plans
explainer_plan(project_id, request) works locally with EXPLAINER_PROJECTS_PATH
and an existing input/evidence-packet.json; plan review needs no CLI, stdin or
provider. Use create, show, revise and approve with compare-and-swap
expected_revision. A full replacement plan records audience, thesis, ordered
concepts/scenes, purpose, exact claim IDs, durations and explicit inclusion or
rejection of every source. Revision invalidates approval and output bindings.
The project stores this authority in planning.sqlite3. Approval is editorial;
unchanged source bytes and approved exact claim text are required. Managed script
production rejects different narration, scene order/purpose or duration budgets.
Accepted script and storyboard bytes receive video_research_plan provenance.
Use show to read actual binding hashes and current status before rendering.
Storyboard binding checks the exact script parent and observed scene IDs/titles/
timing; visual/audio semantics remain unverified. External model output that
paraphrases approved claims is retained as a failed output and cannot be accepted.
Managed generation uses supported individual stages and stops at storyboard;
render separately through durable render tools. The CLI reads
config.json → paths.storyboard: declare a relative confined JSON path. Plan
operations and managed generation/refinement/injection share a fail-fast SQLite
transaction; a concurrent operation returns busy instead of waiting on stdin.
Legacy projects without a managed plan retain their existing CLI arguments.
See the repository's docs/integrations/video-planning.md for complete examples,
output checks and the remaining provider/media acceptance boundaries.
Development
From this package directory:
uv run --locked pytest tests/ -q
uv run --locked ruff check src/ tests/
uv build
Tests use temporary projects and mocked CLI processes; no paid provider calls
are made. The lockfile records the development environment; pyproject.toml
defines supported dependency ranges. See the root
contribution guide and
publishing guide for repository and release checks.
Metadata
Release files for video-explainer-mcp 0.2.2rc2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| video_explainer_mcp-0.2.2rc2.tar.gz | 372.1 kB | Without provenance | Details for video_explainer_mcp-0.2.2rc2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| video_explainer_mcp-0.2.2rc2-py3-none-any.whl | Python 3 | none | any | Details for video_explainer_mcp-0.2.2rc2-py3-none-any.whl |
Total release size: 604.9 kB
Release files / video_explainer_mcp-0.2.2rc2.tar.gz
| Download URL | video_explainer_mcp-0.2.2rc2.tar.gz |
|---|---|
| Size | 372.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ff4aa852ebe3626d78cce197d350b2b517b9cb64729be7d7aea9f00f3103c319
|
|
BLAKE2b-256 checksum How to use checksums |
57bde64ba3c0d0eb8b2891b3ec46559a793074c945cf64f1cf8a2b53f795524c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.8
|
Release files / video_explainer_mcp-0.2.2rc2-py3-none-any.whl
| Download URL | video_explainer_mcp-0.2.2rc2-py3-none-any.whl |
|---|---|
| Size | 232.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0d5f04a5f69e88e9b2d74869b712b23f5f2ea49f27e26722da998033639948a9
|
|
BLAKE2b-256 checksum How to use checksums |
b69a15983a5a86bc1455c662fe68ee56fb6b476740f6aea8a01ea6fa6f76e8ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.8
|
Security for video-explainer-mcp 0.2.2rc2
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.