MCP Server
Vidocu provides a Model Context Protocol (MCP) server that lets AI assistants like Claude interact with the Vidocu API through natural conversation.
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:
Option 1: OAuth (recommended)
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
| URL | https://mcp.vidocu.ai/ |
| Transport | Streamable HTTP |
| Authentication | Authorization: Bearer (API key or OAuth token) |
| OAuth metadata | https://mcp.vidocu.ai/.well-known/oauth-protected-resource |
Available tools
The MCP server exposes 21 tools covering all Vidocu API operations:
Video management
| Tool | Description |
|---|---|
get_upload_url | Get an upload URL for a local video file |
upload_video | Upload a video by providing a public URL |
list_videos | List videos with optional filtering and pagination |
get_video | Get details of a specific video |
Project folders
| Tool | Description |
|---|---|
create_project | Create a project folder to organize videos |
list_projects | List project folders with search and pagination |
get_project | Get details of a specific project folder |
update_project | Update a project folder's name or metadata |
delete_project | Delete a project folder (optionally its videos too) |
Operations
| Tool | Description |
|---|---|
analyze_video | Start video analysis to generate subtitles and metadata |
export_video | Export a video with burned-in subtitles |
translate_video | Translate subtitles to another language |
generate_voiceover | Generate AI voiceover from subtitles |
generate_article | Generate a help article from the transcript |
get_subtitles | Get subtitles in JSON or SRT format |
process_video | One-shot pipeline: analyze, voiceover, article, export, and translate in one step |
Tools & utilities
| Tool | Description |
|---|---|
list_tools | Discover available video processing tools |
get_tool | Get a tool's parameter schema |
execute_tool | Run a video processing tool |
Status & usage
| Tool | Description |
|---|---|
get_job_status | Check progress of an async operation |
get_usage | View current plan, usage, and limits |
OAuth scopes
When using OAuth, the MCP server requests the following scopes based on which tools are used:
| Scope | Tools |
|---|---|
videos:read | list_videos, get_video |
videos:write | get_upload_url, upload_video |
projects:read | list_projects, get_project |
projects:write | create_project, update_project, delete_project |
subtitles:read | get_subtitles |
analyze:write | analyze_video |
export:write | export_video |
translate:write | translate_video |
voiceover:write | generate_voiceover |
article:write | generate_article |
tools:read | list_tools, get_tool |
tools:write | execute_tool |
jobs:read | get_job_status |
usage:read | get_usage |
process:write | process_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"