Skip to main content

MCP Server

Vidocu provides a Model Context Protocol (MCP) server that lets AI assistants like Claude interact with the Vidocu API through natural conversation.

Available on every plan

The MCP integration works on any Vidocu plan when you connect with OAuth - it's not limited to Business like API keys are. Operations draw from your plan's monthly video-minute allowance. (Connecting with an API key instead still requires the Business plan, since API keys do.)

Authentication

The MCP server supports two authentication methods:

MCP clients that support OAuth (like Claude Desktop) can authenticate automatically. The user authorizes Vidocu through a browser-based consent flow — no manual key management needed.

The MCP server advertises Vidocu's OAuth authorization server via RFC 9728 Protected Resource Metadata at /.well-known/oauth-protected-resource.

{
"mcpServers": {
"vidocu": {
"url": "https://mcp.vidocu.ai/"
}
}
}

The MCP client handles the OAuth flow automatically — redirects the user to Vidocu's consent screen, obtains tokens, and sends them as Authorization: Bearer on each request.

Option 2: API Key

For MCP clients that don't support OAuth, or for quick testing, pass your API key as a Bearer token:

{
"mcpServers": {
"vidocu": {
"url": "https://mcp.vidocu.ai/",
"headers": {
"Authorization": "Bearer vdo_live_your_key_here"
}
}
}
}

Get your API key from the Vidocu Dashboard.

Server details

URLhttps://mcp.vidocu.ai/
TransportStreamable HTTP
AuthenticationAuthorization: Bearer (API key or OAuth token)
OAuth metadatahttps://mcp.vidocu.ai/.well-known/oauth-protected-resource

Available tools

The MCP server exposes 21 tools covering all Vidocu API operations:

Video management

ToolDescription
get_upload_urlGet an upload URL for a local video file
upload_videoUpload a video by providing a public URL
list_videosList videos with optional filtering and pagination
get_videoGet details of a specific video

Project folders

ToolDescription
create_projectCreate a project folder to organize videos
list_projectsList project folders with search and pagination
get_projectGet details of a specific project folder
update_projectUpdate a project folder's name or metadata
delete_projectDelete a project folder (optionally its videos too)

Operations

ToolDescription
analyze_videoStart video analysis to generate subtitles and metadata
export_videoExport a video with burned-in subtitles
translate_videoTranslate subtitles to another language
generate_voiceoverGenerate AI voiceover from subtitles
generate_articleGenerate a help article from the transcript
get_subtitlesGet subtitles in JSON or SRT format
process_videoOne-shot pipeline: analyze, voiceover, article, export, and translate in one step

Tools & utilities

ToolDescription
list_toolsDiscover available video processing tools
get_toolGet a tool's parameter schema
execute_toolRun a video processing tool

Status & usage

ToolDescription
get_job_statusCheck progress of an async operation
get_usageView current plan, usage, and limits

OAuth scopes

When using OAuth, the MCP server requests the following scopes based on which tools are used:

ScopeTools
videos:readlist_videos, get_video
videos:writeget_upload_url, upload_video
projects:readlist_projects, get_project
projects:writecreate_project, update_project, delete_project
subtitles:readget_subtitles
analyze:writeanalyze_video
export:writeexport_video
translate:writetranslate_video
voiceover:writegenerate_voiceover
article:writegenerate_article
tools:readlist_tools, get_tool
tools:writeexecute_tool
jobs:readget_job_status
usage:readget_usage
process:writeprocess_video

See OAuth Scopes for full details.

Async operations

Some operations (analyze, export, translate, voiceover, process, execute tool) run asynchronously. These tools return a jobId immediately. Use get_job_status to check progress:

You: "Analyze this video: https://example.com/demo.mp4"

Claude: I'll upload and analyze the video.
→ calls upload_video
→ calls analyze_video → returns { jobId: "analysis_..." }

Claude: The analysis is running. Let me check the status.
→ calls get_job_status → returns { status: "completed", result: { ... } }

Claude: Analysis complete! The video has 24 subtitles generated.

Example conversations

Generate subtitles:

"Upload this video and generate English subtitles: https://example.com/demo.mp4"

Export with subtitles:

"Export my latest video with subtitles burned in"

Translate:

"Translate the subtitles for video vid_abc123 to Spanish and French"

Full pipeline:

"Process this video end-to-end — analyze it, generate a help article, and export: https://example.com/tutorial.mp4"