AI-directed video editing and production server with tools for transcription, captioning, b-roll management, TTS, asset curation, and video composition
OpenScript MCP provides 15 tools with mostly complete schemas and descriptions. Naming follows verb_noun patterns (transcribe, srt.read, asset.ingest). Descriptions are detailed (100-300 chars typical) and explain WHEN to use tools. However, several critical gaps reduce quality: (1) Many parameters lack type constraints (enums, min/max bounds), e.g., asset.probe's 'signal' is array but no item type; voice.profile.add's 'emotions' is object with no schema; (2) Output schemas are NOT documented, tools describe what they return in prose but not as formal JSON Schema; (3) Error handling is absent, no guidance on retryability, user-fixable vs fatal errors, or recovery paths; (4) Some parameter descriptions are vague, 'Optional signal tokens for semantic search' doesn't explain what a signal token is or how to construct one; (5) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (WRITE, DESTRUCTIVE, READ_ONLY marked in metadata but not in schema). Strengths: descriptions are LLM-optimized length, most parameters have descriptions, input schemas are present and mostly well-formed.
Import media from a URL (YouTube, direct file) or local path into the asset library
Index media files from a directory into the asset library
Get the status of the asset library including total assets, breakdown by source and curation status
Search the stock pool (Pexels, Pixabay, etc.) for media matching a query with optional aspect ratio and duration filters
Rate and curate an asset with quality ratings, mood, energy, motion intensity, tags, and relevance scores
Search the local asset library by keywords with optional quality floor filter
Output schemas not documented. Tools describe return values in prose (e.g., 'Returns: output_srt_path, entry_count') but do not provide formal JSON Schema. LLMs cannot plan downstream tool calls or extract fields reliably without structured output definitions.
Missing tool annotations. Risk levels (WRITE, DESTRUCTIVE, READ_ONLY) are marked in metadata but not exposed as readOnlyHint/destructiveHint/idempotentHint in the schema. Agents cannot determine which tools are safe to retry or have side effects.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | <=2025-11-25 | v2 |
Fetch b-roll clips from Pexels/Pixabay for given concepts with optional download and fallback pool support
Suggest b-roll concepts for timeline segments based on captions and cadence
Generate ASS subtitle file from word-level SRT with per-word timing. Optionally remaps timestamps to account for xfade crossfade overlaps between concatenated segments. Use this to create kinetic-style captions (word_highlight, standard, etc.) for any timeline. Returns: ass_path, segment_count.
Convert word-level SRT into phrase-level SRT by grouping words into readable caption segments (max ~10 words, ~64 chars). This is the step between raw transcription and editing — it creates human-readable caption chunks that the EDL uses for segment timing. Returns: output_path with grouped SRT, count of groups.
Parse an SRT file and return all entries with timestamps and text. Use to inspect transcription quality before building edits, or to read an edited SRT for applying changes. Returns: count + entries array with idx, start, end, text.
Convert spoken audio to word-level SRT subtitles. Uses HinglishGgml engine (whisper.cpp + Hindi2Hinglish-Apex-GGML) — produces native Latin-script Hinglish output from Hindi audio. No LLM post-processing needed. ALWAYS call this first on any raw video — it produces the SRT that every other tool depends on. Returns: output_srt_path, entry_count, phrase_srt_path, word_srt_path.
Register a voice profile for TTS synthesis with optional emotion templates and provider-specific configuration
List all registered voice profiles with their provider, language, and gender metadata
Remove a voice profile from the registry
Vague or missing parameter constraints. asset.probe 'signal' is array with no item type; voice.profile.add 'emotions' is object with no schema; asset.rate 'relevance' is object with no field definitions. LLMs cannot validate inputs or construct valid payloads.
No error handling guidance. Tools do not document retryability, user-fixable errors, or recovery paths. If asset.probe returns no results or voice.profile.add fails, the agent has no guidance on what to do next.
Incomplete parameter descriptions. asset.library.status has empty properties object with no description; asset.rate 'mood', 'energy', 'motion_intensity' lack guidance on valid values or format; broll.fetch 'enriched_segments' lacks structure definition.