| title | API Reference — Agentic MCP Tools |
|---|---|
| description | Documentation of the MCP tools exposed by src/agentic/operations and src/adapters/mcp. Purpose, inputs, outputs, and an example for each. |
Every tool in this document is registered by src/mcp-server.ts via the
@modelcontextprotocol/sdk McpServer. Tools are grouped by their registration file
under src/adapters/mcp/. All tools return an MCP text/image content object; the
errorResponse helper is used for failures (except where a tool intentionally returns a
"blocked" text message, e.g. the gate).
Convention:
outis always optional. When omitted, the tool writes intooutput/…(or the job workspace) and returns the produced path. Successful tools returntextResponse("-> <path>\n<detail>"); mutating tools are guarded byassertSafeMutationAllowed('mcp', …).
These expose the single-task operations layer (src/agentic/operations/*). Each does
exactly one thing and is re-verified post-render.
Natural-language router. Classifies a plain request and runs only the matching single task (or a 2–3 step chain split on "then"/"after that"). No paid key needed.
- Inputs:
prompt: string(required),files?: string[],out?: string,voice?: string,orientation?: 'portrait' | 'landscape' - Output: text result (
{summary}\n{detail}) + primary output path. - Example:
{ "prompt": "crop to 9:16 then add music ambient lofi", "files": ["input/clip.mp4"] }
Concatenate two or more videos into one.
- Inputs:
files: string[](min 2),out?: string,orientation?: 'portrait'|'landscape'(defaultportrait) - Output:
EditResult→ text-> <output>\n<detail> - Example:
{ "files": ["a.mp4","b.mp4"], "out": "merged.mp4" }
Cut a clip to [start, end] seconds.
- Inputs:
file: string,out?: string,start: number(default 0),end?: number - Example:
{ "file": "a.mp4", "start": 2, "end": 10 }
Crop to a target aspect.
- Inputs:
file: string,out?: string,preset?: '9:16'|'16:9'|'1:1' - Example:
{ "file": "a.mp4", "preset": "9:16" }
Scale to W×H (h = -2 keeps aspect ratio).
- Inputs:
file: string,out?: string,w: number(default 720),h: number(default -2) - Example:
{ "file": "a.mp4", "w": 1080, "h": 1080 }
Rotate 90/180/270 degrees.
- Inputs:
file: string,out?: string,deg: '90'|'180'|'270'(default'90') - Example:
{ "file": "a.mp4", "deg": "90" }
Pull the audio track out of a video as mp3.
- Inputs:
file: string,out?: string - Example:
{ "file": "a.mp4", "out": "a.mp3" }
Split into N equal parts, or at explicit marks (seconds).
- Inputs:
file: string,parts?: number,marks?: number[],out?: string - Example:
{ "file": "a.mp4", "parts": 3 }or{ "file": "a.mp4", "marks": [5, 12] }
Burn captions from text or an existing .srt.
- Inputs:
file: string,text?: string,srt?: string,out?: string - Example:
{ "file": "a.mp4", "text": "Hello world" }
Add a free background music track under the video (auto-ducked).
- Inputs:
file: string,query?: string(default'ambient lofi'),out?: string - Example:
{ "file": "a.mp4", "query": "cinematic epic" }
Mux a user-supplied audio (voiceover/narration) onto a video.
- Inputs:
file: string,audio: string,volume: number(default 1.0),out?: string - Example:
{ "file": "a.mp4", "audio": "vo.mp3", "volume": 1.0 }
Produce translated subtitle sidecars (es/fr/hi/ta/…). Uses free-model translation with
offline fallback to original text.
- Inputs:
file?: string,text?: string,languages: string[],outDir?: string - Example:
{ "text": "Welcome to the channel", "languages": ["es","hi"] }
Apply a cinematic color grade.
- Inputs:
file: string,preset: 'cinematic'|'vivid'|'neon'|'teal-orange'|'bleach-bypass'|'neutral'|'warm'|'cool'(default'cinematic'),out?: string - Example:
{ "file": "a.mp4", "preset": "neon" }
Slow the whole clip by a factor (2 = half speed).
- Inputs:
file: string,factor: number(default 2),out?: string - Example:
{ "file": "a.mp4", "factor": 2 }
Slow a middle window of the clip, normal elsewhere.
- Inputs:
file: string,rampStart: number(default 1),rampEnd: number(default 3),slowFactor: number(default 3),out?: string - Example:
{ "file": "a.mp4", "rampStart": 1, "rampEnd": 3, "slowFactor": 3 }
Burn a corner watermark/logo text.
- Inputs:
file: string,label: string(default'MyBrand'),out?: string - Example:
{ "file": "a.mp4", "label": "MyBrand" }
Burn a lower-third name/title bar.
- Inputs:
file: string,text: string(default'Title'),out?: string - Example:
{ "file": "a.mp4", "text": "Host Name" }
Burn a progress bar at the bottom of a video.
- Inputs:
file: string,out?: string - Example:
{ "file": "a.mp4" }
Produce 9:16 / 16:9 / 1:1 versions + a thumbnail from an existing video.
- Inputs:
file: string,aspects: ('9:16'|'16:9'|'1:1')[](default all three),thumbnail: boolean(default true),outDir?: string - Example:
{ "file": "a.mp4", "aspects": ["9:16","1:1"], "thumbnail": true }
Generate an mp3 voiceover from text using the configured TTS provider (default: Voicebox/Kokoro).
- Inputs:
text: string(min 1,;or newline splits lines),voice?: string,out?: string - Example:
{ "text": "Hello world; Welcome to my video", "voice": "af_sky" }
Fetch a free CC image for a keyword.
- Inputs:
keyword: string(min 1),out?: string - Example:
{ "keyword": "coffee cup" }
Fetch a free CC video for a keyword.
- Inputs:
keyword: string(min 1),out?: string - Example:
{ "keyword": "city timelapse" }
Detect and remove silence segments from an audio/video file.
- Inputs:
file: string,out?: string - Example:
{ "file": "a.mp4" }
Detect scene changes in a video and return timestamps.
- Inputs:
file: string - Example:
{ "file": "a.mp4" }
Auto-reframe a video to a target aspect ratio (9:16/16:9/1:1) with subject-aware cropping.
- Inputs:
file: string,preset: '9:16'|'16:9'|'1:1',out?: string - Example:
{ "file": "a.mp4", "preset": "9:16" }
Reduce background noise from an audio track.
- Inputs:
file: string,strength?: number(default 0.5),out?: string - Example:
{ "file": "a.mp4", "strength": 0.7 }
Apply a brand kit overlay (logo, colors, fonts) to a video.
- Inputs:
file: string,out?: string - Example:
{ "file": "a.mp4" }
The "agent has complete control" surface over the six stages. agentic_run is the
one-shot end-to-end path.
Turn a script into a director plan (scenes + music query).
- Inputs:
jobId: string,title: string,script: string(min 10),orientation?: 'portrait'|'landscape'(defaultportrait),voice?: string,musicQuery?: string - Output: text
Planned N scenes. Music query: "…". orientation=… - Example:
{ "jobId": "job_1", "title": "Coffee Facts", "script": "Did you know coffee… [Visual: espresso machine]" }
Download candidate images/videos/music into per-type folders.
- Inputs:
jobId: string,candidatesPerAsset: number(1–5, default 2) - Output: text
Acquired N candidates into <workspace>. - Example:
{ "jobId": "job_1", "candidatesPerAsset": 2 }
Run the full verification matrix on all candidates.
- Inputs:
jobId: string - Output: text
<pass> pass, <fail> fail. Details in verification/*.json. - Example:
{ "jobId": "job_1" }
Show every candidate + its verification score for agent review (markdown table).
- Inputs:
jobId: string - Example:
{ "jobId": "job_1" }
Return a base64 thumbnail/frame so the agent can see the asset.
- Inputs:
jobId: string,assetId: string(e.g.image_s0_c1) - Output: MCP
imagecontent (database64,mimeType: image/jpeg) - Example:
{ "jobId": "job_1", "assetId": "image_s0_c1" }
Agent approves/rejects a candidate (full control). reject_asset triggers a re-fetch via
the gateway.
- Inputs:
jobId: string,assetId: string,rationale?: string - Example:
{ "jobId": "job_1", "assetId": "image_s0_c1", "rationale": "good composition" }
Revise a rendered video with AI feedback. The agent re-examines the rendered output and suggests improvements (re-cut, regrade, re-voice, etc.).
- Inputs:
jobId: string,feedback?: string - Example:
{ "jobId": "job_1", "feedback": "Make it shorter and add more transitions" }
Run AI critique on a rendered video, analyzing pacing, visual quality, audio quality, and caption readability.
- Inputs:
jobId: string - Example:
{ "jobId": "job_1" }
Run the final holistic gate (X1–X6). Blocks render if anything unverified.
- Inputs:
jobId: string - Output:
GATE PASS. Render manifest ready (N assets).orerrorResponselisting failed checksX<id> <label>: <detail>. - Example:
{ "jobId": "job_1" }
Hermes writes the script, expands keywords, acquires, verifies and decides every asset
— no external AI needed when backend='agent'.
- Inputs:
topic: string(min 5),title: string,backend?: 'agent'|'vision'(defaultagent),orientation?: 'portrait'|'landscape'(defaultportrait),voice?: string,candidatesPerAsset: number(1–5, default 2) - Output:
DONE (backend=agent, fullyAgentDriven=true). N assets approved. GATE PASS — ready to render M assets.or aGATE BLOCKEDerror listing failures. - Example:
{ "topic": "5 fascinating facts about coffee", "title": "Coffee Facts", "backend": "agent" }
All mutating tools require
assertSafeMutationAllowed('mcp', …).
Write/update a script in input/scripts/input-scripts.json. Schema = videoScriptSchema.
Read all scripts from input/scripts/input-scripts.json. (No inputs.)
Delete a script by ID. Inputs: id: string.
Validate a script format before saving. Schema = videoScriptSchema.
Upload a base64 file to input/visuals/ (max 50 MB).
- Inputs:
filename: string,base64Data: string - Example:
{ "filename": "logo.png", "base64Data": "<base64>" }
Delete a file from input/visuals/. Inputs: filename: string.
List all completed videos in the output directory. (No inputs.)
Read a file from a video output directory.
- Inputs:
videoId: string,filename?: string
Delete an entire video output directory. Requires assertSafeMutationAllowed.
- Inputs:
videoId: string
Start a background job to generate a professional video.
- Inputs:
pipelineJobRequestSchema.partial({language})extended withid?: string,publicId?: string,skipReview: boolean(default true) - Output: text with
Job ID,Output ID, and aget_video_statusreminder. - Example:
{ "scripts": [{ "id": "s1", "title": "Coffee", "scenes": [] }], "skipReview": true }
Check progress/status of a job. Inputs: jobId: string.
- Output: text
Status / Progress / Message / Output Path / File Size / Error.
Execute a whitelisted npm script (generate, resume, segment, batch, …). Requires
assertSafeMutationAllowed.
- Inputs:
command: string,args?: string[] - Example:
{ "command": "batch" }
List recent jobs and their status (markdown table). (No inputs.)
Read output/batch-manifest.json summary (Batch Queue Manager). (No inputs.)
Read .env (masked by default). Inputs: showSecrets?: boolean.
Update a .env variable. Requires assertSafeMutationAllowed. Inputs: key: string, value: string.
Project system information. (No inputs.)
Verify dependencies + directory state (pipelineAppService.getDiagnostics()). (No inputs.)
Return absolute project paths (input/output/public dirs). (No inputs.)
List files under public/ (or a subdir; .. rejected). Inputs: subdir?: string.
List available TTS voices (8 built-in Neural voices). (No inputs.)
List media files in input/visuals/. (No inputs.)
Search free CC videos from Wikimedia Commons and Internet Archive. No API key.
- Inputs:
keyword: string,count?: number(default 5),source?: 'all'|'wikimedia'|'archive',maxDuration?: number,minResolution?: number,sortBy?: 'relevance'|'newest'|'resolution' - Output: text listing titles, creators, licenses, durations, resolutions, URLs.
- Example:
{ "keyword": "ocean waves", "source": "wikimedia", "maxDuration": 30 }
Download a free CC video by URL into the workspace.
- Inputs:
url: string,title: string,creator?: string,license?: string,format?: string - Output: text with
Title / Creator / License / File / Size / Local Path / Public URL. - Example:
{ "url": "https://upload.wikimedia.org/…/ocean.webm", "title": "Ocean Waves", "license": "CC BY" }
assertSafeMutationAllowed('mcp', …)guards all write/delete/env/command tools. If the MCP mutation capability is disabled, these tools return an error rather than executing.- Post-render verification — single-task video tools re-run
verifyRenderedVideo(X7–X9) and attachgateto the result; a broken edit is reported, not silently shipped. - Offline safety — every network-dependent tool has a free fallback (placeholder card,
tone audio, cached music). A tool never throws a hard failure on missing network; it
returns a descriptive
detail.