Skip to main content
The hosted VideoDB MCP server at https://mcp.videodb.io/mcp exposes 89 tools, grouped into toolsets by what they operate on. Every tool is annotated with a kind, which is how a client knows whether the call changes your account and whether to ask you first.

IDs and conventions

Every ID input takes one of those prefixed forms: video_id is an m- ID, audio_id an a- ID, image_id an img- ID, rtstream_id an rts- ID, collection_id a c- ID. media_id accepts a video or an audio ID. Every account has a collection named default, so leaving collection_id out sends the call there. Reading the Inputs column: a plain name is required, a trailing ? means optional, and ?=value is the default the server applies when you omit it. Tools with more than eight inputs show the first six, and a full table of every field follows the toolset table.
  • Inputs and outputs are snake_case.
  • A write that runs long returns {"status": "processing", ...} with a retry_with field naming the read tool that shows the finished result.
  • Large lists are capped. A capped result carries truncated: true and total.

collections

Collections hold your media. Account usage and invoices live here too.

media

List, fetch, upload, rename and delete videos, audio and images, plus thumbnails, signed download URLs and transcoding.

list_assets inputs

transcode_media inputs

Notes
  • get_media_download_url covers audio and images only. For a video, render it with download_stream.
  • Uploads take a public URL. Local file paths are not supported.
  • A write that runs long comes back as status: "processing" with a retry_with: upload_media names list_videos, generate_thumbnail names list_thumbnails, transcode_media names get_transcode_status.

transcripts

Speech to text, plus translation of what comes back. Prerequisites
  • translate_transcript needs an existing transcript. Run get_transcript or generate_transcript first. It works on videos only.
  • get_transcript and generate_transcript accept either media_id or video_id. Give exactly one.
  • While a transcription is still running, both come back as status: "processing" with retry_with: get_transcript.

indexing

Two pipelines: the v1 spoken-word and scene indexes, and the v2 flow where understand_video extracts artifacts and create_index turns one analyzer’s output into a searchable index.

index_scenes inputs

create_index inputs

Prerequisites
  • create_index needs an understand_video run whose analyzer has finished. Check with get_understanding.
  • create_index and get_analyzer_output accept either analyzer_name or analyzer_id. Give exactly one.
  • An index declares what it can serve through use_for. The values are semantic, query and aggregate, and they map to the search tools below.
  • understand_video takes analyzers as a list of objects, [{type: "spoken_words"}, {type: "vlm", prompt: "Describe the scene"}], and segmentation as {type: "time", seconds: 5} or {type: "shot", threshold: 30}.
  • A write that runs long comes back as status: "processing" with a retry_with: index_spoken_words names search_video, index_scenes names list_scene_indexes, understand_video names get_understanding, create_index names get_index.
Moment search and question answering, over one video or a whole collection.

search_video inputs

semantic_search inputs

aggregate_index inputs

Prerequisites
  • search_video and search_collection read the v1 indexes: spoken-word search needs index_spoken_words, and index_type='scene' needs index_scenes.
  • ask_video and ask_collection need v2 indexes built by create_index.
  • semantic_search, query_index and aggregate_index need an index built by create_index whose use_for includes semantic, query and aggregate respectively. Each takes index_name or index_id, and each runs over one video with video_id or the whole collection without it.
  • filter takes [{"field": "label", "op": "==", "value": "phone"}] or the shorthand {"activity": "walking"}. sort takes [["start", "asc"]]. return_fields takes a field name, a list of them, or "all".

streams

Cut, stitch, subtitle and reframe videos into playable streams, then render them to MP4.

add_subtitles inputs

Prerequisites
  • add_subtitles needs index_spoken_words on the video first.
  • download_stream takes a stream URL from generate_clip, compile_clips, add_subtitles, create_highlight_clip or get_video.
  • generate_clip takes timeline as [start_seconds, end_seconds] pairs, [[10, 25], [60, 90]]. compile_clips takes clips as a list of objects in playback order.
  • reframe_video takes target as a preset (vertical, square, landscape) or an explicit {width, height}. It comes back as status: "processing" with retry_with: list_videos.

editor

Multi-track timeline rendering. Tracks hold clips, and each clip carries a video, image, audio, text or caption asset. Notes
  • A caption asset with src: "auto" pulls from the video’s spoken-word index. On an unindexed video the render succeeds with no captions, so run index_spoken_words first.
  • Text assets sized with width/height keep those dimensions only under fit: "contain". The default fit: "crop" upscales the text box to fill the frame.
  • tracks carries the whole edit. It is a list of track objects, each holding its clips and their assets.

rtstream

Ingest live RTSP, RTMP and HLS streams, index them continuously, search them, and get alerts on events. All timestamps are Unix seconds. Prerequisites
  • Everything here starts with connect_rtstream. Indexes, understandings and alerts attach to a stream that is already connected and ingesting.
  • get_rtstream_transcript needs transcription running, started either by connect_rtstream with enable_transcript or by set_rtstream_transcript_status.
  • search_rtstream needs a scene index or an understanding-backed index on the stream.
  • create_rtstream_index needs an understand_rtstream job started with store=true.
  • create_rtstream_alert needs an event from create_event and an index to attach it to. Alerts cannot be deleted, only disabled with set_rtstream_alert_status.
  • list_rtstreams is account-scoped, not per collection. Each row carries its own collection_id.
  • Alert tools take index_kind to say which index the index_id belongs to: scene_index for one built by index_rtstream_scenes or index_rtstream_audio, index for one built by create_rtstream_index.
  • A write that runs long comes back as status: "processing" with a retry_with: connect_rtstream names list_rtstreams, export_rtstream_recording names get_video, index_rtstream_scenes and index_rtstream_audio name list_rtstream_scene_indexes, understand_rtstream names list_rtstream_understandings, create_rtstream_index names list_rtstream_indexes, create_event names list_events, create_rtstream_alert names list_rtstream_alerts.

meetings

Send a recorder bot into a meeting and collect the recording. Prerequisites
  • record_meeting comes back as soon as the bot is dispatched, with status: "processing" and retry_with: get_meeting. Poll get_meeting until status is done. Only then does video_id have a value.

Not exposed

For generation, use the generative media guides. For desktop capture and local files, use VideoDB Agent Skills, which run on your machine.

MCP Server

What the hosted server is and what it connects to

Connect a Client

Add the server to Claude, Cursor and other MCP clients

Workflows

End-to-end recipes built from these tools