Skip to main content
Glama

demo-vid-mcp

Demo video pipeline for fleet repos. Records narrated walkthroughs of any webapp by orchestrating Playwright, speech-mcp TTS, and FFmpeg composition.

Quick Install

uvx mcpb install sandraschi/demo-vid-mcp

Related MCP server: autodemo

What You Can Do

  • Generate a video: demo_vid_generate(repo="chitchat") — auto-starts the target webapp, records it, adds voiceover, composes MP4

  • Or drive a native app live: demo_vid_generate(repo="blender-mcp", script_yaml=<desktop-capture script>) — OBS records a real app window (Blender, Resonite) while mcp_call steps actually invoke that app's own MCP server during the recording, not a staged screencast. See data/scripts/*.yaml for working examples and DEMO_VID_MCP_PLAN.md for the architecture.

  • Draft a script: demo_vid_script_draft(repo="chitchat") — reads the README and generates a narration script

  • Browse the depot: Categorized gallery of produced videos with inline player, subtitle tracks (.vtt), poster previews, rebuild, delete, and insert into repo README

  • Persistent queue: Background queue manager to schedule and track batch video generation across the fleet

  • Chat about it: Built-in chat with personalities, example prompts, and local LLM integration (Ollama/LM Studio)

Tools

Tool

Description

demo_vid_generate(repo, script_yaml?, base_url?, theme="dark", aspect_ratio="16:9", resolution="720p")

Full pipeline: voiceover (speech-mcp) → record (Playwright with click ripples) → compose (FFmpeg) → MP4 + WebVTT/SRT subtitles + poster image. Supports landscape (16:9) or vertical mobile (9:16). Also auto-detects native desktop-capture mode via obs-mcp.

demo_vid_script_draft(repo)

Generate a narration YAML from the target repo's README and webapp page structure

demo_vid_script_validate(yaml)

Validate a narration script's structure, timing, aspect ratio, and resolution

demo_vid_list(repo?)

List produced videos with metadata, poster, and subtitle sidecar paths

demo_vid_refine(name, feedback)

Automatically parse user feedback and mutate YAML narration timing, voice, and steps

demo_vid_help

List all tools and usage information

demo_vid_shutdown

Gracefully terminate the server and background queue worker

Webapp

Page

Purpose

Dashboard

Backend status, KPI cards, dead port detection with one-click reconnect

Depot

Categorized gallery with HTML5 player, subtitle toggle, poster previews, rebuild, delete

Queue

Persistent background job queue manager with live polling, status badges, and cancel controls

Generate

Select target repo by category, pick aspect ratio/resolution, draft YAML, and generate or queue

Choreography

Visual script builder — 11 step types, global options, YAML preview

Chat

SOTA chat with personalities, localStorage, example prompts, LLM integration

Settings

LLM provider probe (Ollama/LM Studio), model selection, persistence

Logs

Ring-buffer log viewer with level filter and search

Help

6-tab reference: overview, architecture, tools, config, fleet, troubleshooting

Autostart

demo_vid_generate automatically starts the target repo's backend and Vite frontend before recording. Zombie-kills stale processes first. No manual setup — the pipeline scans for start.ps1 and webapp/ directories.

Themes

Recording is dark-mode by default (fleet identity). Pass theme="light" to record a bright demo — the capture script forces the target webapp's theme class (handles both .dark toggling and persisted localStorage light-mode keys) before navigation, per chat_skills_prefab_standard.md §7.1.

Fleet Services

Required: speech-mcp (voiceover), Playwright (recording), FFmpeg (composition). Optional: blender-mcp (3D titles), stems-mcp (music), vfx-mcp (effects).

Desktop-capture mode (native apps driven live — see DEMO_VID_MCP_PLAN.md): windows-computer-use-mcp (window focus), obs-mcp (recording — window-capture and human-in-video), plus whichever MCP server the demo actually drives (blender-mcp, resonite-mcp, ...).

Ports

Backend: 11134, Frontend: 11135, speech-mcp: 10909. See WEBAPP_PORTS.md.

Documentation

Doc

Contents

Roadmap & Architecture

Desktop-capture mode design, the mcp_call step type, the real remaining constraint (no Resonite camera control), v0.3 plans

Installation

All install methods, prerequisites

Configuration

Env vars, config options

Tool Reference

All available tools

Development

Contributing, local setup

Troubleshooting

Common issues

Requirements

  • Python 3.13+ with uv

  • FFmpeg (for composition)

  • speech-mcp (for voiceover)

  • Playwright (for recording, auto-installed)

License

MIT

Available Tools

6 tools
demo_vid_generateA

Generate a demo video for a fleet repo.

Runs the full pipeline: validate script → voiceover (speech-mcp) → record (Playwright) → compose (FFmpeg). Stages run in parallel where possible. Output saved to data/videos/. theme="light" records the target webapp with its light-mode toggle forced on (bright demo); default "dark" matches fleet identity.

Return Format

{"success": bool, "message": str, "video_path": str | None, "stages": {...}}

Examples

await demo_vid_generate(repo="chitchat") await demo_vid_generate(repo="chitchat", theme="light") await demo_vid_generate(repo="chitchat", base_url="http://127.0.0.1:10975")

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name (e.g. 'chitchat').
themeNoVideo theme: 'dark' (fleet default) or 'light' (bright demo).dark
base_urlNoTarget webapp URL (e.g. 'http://127.0.0.1:10975'). Auto-detected from port registry if omitted.
script_yamlNoOptional YAML narration script. Defaults to auto-generated.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the pipeline stages (validate, voiceover, record, compose), parallel execution, output path (`data/videos/`), and side effects of file creation. It also explains theme behavior and base_url auto-detection. However, it does not mention potential runtime, network dependencies, or destructiveness, which would improve transparency.

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 well-structured with headings, bullet points for return format, and code examples. It is succinct (about 10 lines) with no redundant words. Every sentence contributes to understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multi-stage pipeline with external calls), the description covers the purpose, parameters, behavior, output structure, and examples. An output schema exists (not shown but referenced), so the return format description suffices. The description feels complete for an AI agent to use this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema: it explains the theme values in terms of behavior (light mode toggle), clarifies auto-detection for `base_url`, and shows usage via examples. This adds significant value.

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 verb 'Generate' and the resource 'demo video for a fleet repo'. It distinguishes itself from sibling tools (help, list, refine, script_draft, script_validate) by describing the full pipeline and final output, making it unambiguous that this is the main generation step.

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 usage through the pipeline breakdown and examples, but it does not explicitly state when to use this tool versus the siblings (e.g., 'Use demo_vid_script_draft first to draft a script'). While the context is clear, there is no explicit 'when to use' or 'when not to use' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

demo_vid_helpA

List all available demo-vid-mcp tools and their purpose.

Return Format

{"success": bool, "tools": [{"name": str, "description": str}], "message": str}

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the transparency burden. It explicitly states the action ('List') and provides the exact return format, clearly indicating a read-only operation. While it doesn't mention side effects, the nature of a help tool makes this self-evident.

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, front-loaded sentence followed by a compact return format block. Every element earns its place, and there is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with a simple output schema, the description is complete. It states the purpose and the exact return structure, and sibling context helps differentiate it from other tools. No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the input schema is empty. Per the baseline for no parameters, a score of 4 is appropriate. The description adds no parameter details because none exist.

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 uses a specific verb ('List') and identifies the exact resource ('all available demo-vid-mcp tools'), clearly distinguishing it from sibling tools like demo_vid_list (which likely lists videos) and demo_vid_generate. The purpose is unambiguous.

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 tool's purpose implies usage when an agent needs to discover available tools, but the description does not explicitly state when to use it versus alternatives like demo_vid_list or provide exclusions. Usage context is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

demo_vid_listB

List produced demo videos with metadata.

Scans the local data/videos/ directory for .mp4 files and returns file name, size, and creation date for each.

Return Format

{"success": bool, "videos": [{"name": str, "repo": str, "size_kb": int, "created": str}], "count": int}

Examples

await demo_vid_list() await demo_vid_list(repo="chitchat")

ParametersJSON Schema
NameRequiredDescriptionDefault
repoNoFilter by repo name (optional).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for transparency. It discloses that the tool scans a local directory for .mp4 files, implying file-system access and a non-destructive read operation. However, it does not mention edge cases like empty directories, missing directory, or performance implications of scanning (e.g., large directories).

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 concise and well-structured, with 4 sentences plus a code block for the return format and examples. The key action ('List produced demo videos') is front-loaded, and every sentence adds value—detailing the scanning source, metadata, return format, and usage examples. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, output schema provided), the description covers the core functionality well. The return format and example usage are included, which compensates for the lack of annotations. However, it could briefly mention that the tool only lists already-existing videos (distinguishing from demo_vid_generate) and note potential issues like large directories.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with a single parameter (repo) described as 'Filter by repo name (optional).' The description's examples show usage with and without repo, adding implicit meaning that filtering is optional. Since schema coverage is high, a baseline of 3 is appropriate; the description does not add significant semantic value beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool lists produced demo videos with metadata, specifying the source as the local data/videos/ directory for .mp4 files. It distinguishes itself from siblings like demo_vid_generate (which likely creates) and demo_vid_help (which likely provides assistance), though not explicitly naming alternatives.

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?

While the description explains what the tool does and provides an example for optional filtering by repo, it does not guide when to use this tool over siblings (e.g., when to call demo_vid_list vs demo_vid_script_draft or demo_vid_generate). There is no mention of prerequisites, context, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

demo_vid_refineA

Re-generate a video with timing or narration adjustments.

[RATIONALE] This tool is a stub — refinement requires LLM-driven script mutation which is not yet implemented. It returns a helpful message pointing to the working alternative (demo_vid_generate with an updated script).

Return Format

{"success": False, "error": str, "suggestions": list}

Examples

await demo_vid_refine(video_name="chitchat-final", feedback="Make step 2 narration longer")

ParametersJSON Schema
NameRequiredDescriptionDefault
feedbackYesNatural-language description of changes needed.
video_nameYesName of the video to refine (e.g. chitchat-final).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description honestly discloses that the tool is a stub and returns a helpful message, with a stated return format. Annotations are absent, but the description provides clear behavioral context, including the 'success': False indication and suggestions list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (rationale, return format, examples) and is appropriately sized for a stub tool. No wasted sentences, though the rationale could be more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is a stub, the description adequately covers its limited functionality and return format. The presence of an output schema and example adds completeness. No significant gaps for this context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, providing clear meanings for 'feedback' and 'video_name'. The description adds little extra beyond the schema, but an example use case is provided, which aids understanding. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool re-generates a video with timing or narration adjustments, distinguishing it from sibling tools like demo_vid_generate. However, it mentions it is a stub, which may slightly reduce clarity for agents expecting full functionality.

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 explicitly points to the working alternative (demo_vid_generate with updated script), offering good when-to-use guidance. However, it doesn't elaborate on when to use this tool vs other siblings, leaving some context implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

demo_vid_script_draftA

Draft a default narration script for a repo.

Generates a placeholder YAML script that can be edited and passed to demo_vid_generate.

Return Format

{"success": bool, "script": dict, "message": str}

Examples

await demo_vid_script_draft(repo="chitchat")

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYesRepository name to draft a script for.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool generates a 'placeholder' script, which is editable, and provides the return format. However, it does not discuss side effects, idempotency, rate limits, or authentication requirements. The description adds some behavioral context but is not comprehensive.

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 concise: three sentences plus a structured return format and an example. The first sentence clearly states the purpose, followed by the output format and a usage example. Every sentence serves a purpose, and there is no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no annotations), the description is fairly complete. It includes the return format, links to the sibling tool demo_vid_generate for the workflow, and provides an example. However, it does not mention error conditions or prerequisites (e.g., repo existence). The output schema is not provided, but the description compensates with a return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for the single parameter 'repo' (description: 'Repository name to draft a script for.'). The tool description does not add additional meaning beyond the schema; it only uses the parameter in the example. With high coverage, baseline is 3, and no extra value is provided.

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 purpose: 'Draft a default narration script for a repo.' It specifies that it generates a placeholder YAML script for editing and passing to demo_vid_generate, distinguishing it from sibling tools like demo_vid_script_validate (validation) and demo_vid_generate (final generation).

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 a workflow: draft, edit, then pass to demo_vid_generate. However, it does not explicitly state when to use this tool versus alternatives (e.g., when to use demo_vid_refine instead), nor does it provide exclusion criteria or prerequisites. The guidance is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

demo_vid_script_validateA

Validate a narration script for structure and timing.

Checks that the script has required fields ('steps'), each step has an 'action',
and timing values are reasonable.

## Return Format
{"success": bool, "message": str, "errors": list | None}

## Examples
await demo_vid_script_validate(script_yaml="title: Test

duration_target: 30 steps:

  • action: goto url: / wait: 2 ")

ParametersJSON Schema
NameRequiredDescriptionDefault
script_yamlYesYAML narration script content.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions checks for required fields and reasonable timing but does not disclose if the tool is read-only, whether it has side effects, or its behavior on validation failure (e.g., does it raise errors?). The description adds some behavioral context but lacks depth for a validation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with about 5 lines of prose plus a return format specification and example. It front-loads the core purpose and uses markdown headers for structure. No superfluous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has only one parameter (with 100% schema coverage), an output schema, and a clear validation purpose, the description covers the essentials. It provides return format and an example, but could add more context about error types or edge cases. General advice is addressed, but still complete enough for typical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds minimal value by stating the script must be YAML and listing expected fields like 'steps' and 'action', but does not elaborate on the parameter format or constraints beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool validates a narration script for structure and timing, specifying the required fields and checks. It distinguishes itself from siblings like demo_vid_script_draft (which drafts scripts) and demo_vid_generate (which generates videos) but does not explicitly differentiate from all siblings.

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 when you need to validate a script before generating a video, but it does not explicitly state when to use this tool versus alternatives like demo_vid_help for general help or demo_vid_refine for refinement. No when-not-to-use or alternative guidance is provided.

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. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.0
    • First observeddemo_vid_generate
    • First observeddemo_vid_help
    • First observeddemo_vid_list
    • First observeddemo_vid_refine
    • First observeddemo_vid_script_draft
    • First observeddemo_vid_script_validate

TDQS

A4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: help lists tools, generate creates videos, list shows existing videos, refine is for adjustments (stub), script_draft creates scripts, script_validate checks them. No overlap or ambiguity.

Naming Consistency5/5

All tools follow a consistent 'demo_vid_<verb>' pattern (help, generate, list, refine) with compound names for script operations (script_draft, script_validate) adhering to the same convention. No mixing of styles.

Tool Count5/5

With 6 tools covering help, generation, listing, refinement, and script drafting/validation, the count is well-scoped for a focused demo video generation server. No unnecessary tools, and each serves a clear role.

Completeness4/5

Core operations are covered: create (generate), read (list), and script management (draft/validate). However, the refine tool is a stub (non-functional), effectively missing a working update operation, and there is no delete tool. This leaves minor gaps but the main workflow is intact.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sandraschi/demo-vid-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server