Skip to main content

MCP server for comprehensive video analysis — transcription, AI-powered visual frame analysis, and metadata extraction

Project description

VideoScan MCP

An MCP (Model Context Protocol) server for comprehensive video analysis — AI-powered transcription, visual frame analysis, and metadata extraction from 1000+ platforms.

Features

  • Full video analysis — combines transcription, frame extraction, and metadata in a single call
  • AI vision analysis — describes frames and extracts on-screen text (OCR) using GPT-4o, Claude, or Gemini
  • Audio transcription — Whisper-based transcription with timestamps and language detection
  • Smart frame extraction — scene-change detection, interval sampling, or combined strategy
  • Deduplication — perceptual hashing removes near-duplicate frames before analysis
  • Metadata extraction — title, duration, chapters, tags, view count, and more without full download
  • Multi-provider — OpenAI, Anthropic, and Google vision providers with per-request override
  • Caching — persistent cache for downloads, frames, and results to minimize repeat costs
  • 1000+ platforms — powered by yt-dlp (YouTube, Vimeo, Twitter/X, TikTok, and more)

Installation

pip install videoscan-mcp

System dependencies

VideoScan requires ffmpeg for video processing and yt-dlp for downloading from URLs.

# macOS
brew install ffmpeg yt-dlp

# Ubuntu/Debian
apt install ffmpeg
pip install yt-dlp

# Windows — install ffmpeg from https://ffmpeg.org/download.html, then:
pip install yt-dlp

Configuration

Copy .env.example to .env and fill in at minimum one API key:

# Vision provider (frame analysis)
VISION_PROVIDER=openai          # openai | anthropic | google
VISION_MODEL=                   # optional — defaults: gpt-4o / claude-sonnet-4-20250514 / gemini-2.0-flash

# Transcription provider
TRANSCRIPTION_PROVIDER=openai   # openai only for now
TRANSCRIPTION_MODEL=whisper-1

# Concurrency
VISION_CONCURRENCY=5            # max parallel vision API calls

# API keys — only need the key for your chosen provider
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GOOGLE_API_KEY=AIza...

# Cache
CACHE_ENABLED=true
CACHE_DIR=~/.videoscan/cache
CACHE_MAX_SIZE_GB=5
CACHE_DOWNLOAD_TTL=3600         # 1 hour
CACHE_FRAMES_TTL=86400          # 24 hours
CACHE_RESULTS_TTL=604800        # 7 days

# Safety limits (set to 0 for unlimited)
MAX_VIDEO_DURATION=3600         # 60 minutes in seconds
MAX_DOWNLOAD_SIZE=2147483648    # 2 GB in bytes
MAX_ANALYZED_FRAMES=100
DOWNLOAD_TIMEOUT=300
FRAME_ANALYSIS_TIMEOUT=30

Quick Start — Claude Code

Add VideoScan to your Claude Code settings.json (usually at ~/.claude/settings.json):

{
  "mcpServers": {
    "videoscan": {
      "command": "videoscan",
      "env": {
        "OPENAI_API_KEY": "sk-..."
      }
    }
  }
}

Or using uvx without a global install:

{
  "mcpServers": {
    "videoscan": {
      "command": "uvx",
      "args": ["videoscan-mcp"],
      "env": {
        "OPENAI_API_KEY": "sk-..."
      }
    }
  }
}

Once connected, you can ask Claude things like:

  • "Analyze this YouTube video: https://youtube.com/watch?v=..."
  • "Transcribe the audio from this video file"
  • "What's on screen at the 2:30 mark of this video?"
  • "Extract frames from this video and describe what you see"

Tool Reference

analyze_video

Full pipeline — transcription + AI frame analysis + metadata in one call.

Parameter Type Default Description
source string required URL or local file path
detail string "standard" Vision level: "brief", "standard", "detailed"
max_frames int 30 Maximum frames to analyze (1–100)
threshold float 0.3 Scene change sensitivity (0.0–1.0)
strategy string "combined" Frame extraction: "scene", "interval", "combined"
interval int 5 Seconds between frames in interval mode
skip_frames bool false Skip visual analysis (transcription only)
skip_audio bool false Skip transcription (frames only)
language string "auto" Transcription language or "auto"
provider string null Override vision provider
force_refresh bool false Bypass cache

transcribe

Transcribe video or audio to text with timestamps.

Parameter Type Default Description
source string required URL or local file path
language string "auto" Preferred language or "auto" for detection

extract_frames

Extract and AI-analyze frames from a video.

Parameter Type Default Description
source string required URL or local file path
max_frames int 30 Maximum frames to extract (1–100)
threshold float 0.3 Scene change sensitivity (0.0–1.0)
strategy string "combined" "scene", "interval", or "combined"
interval int 5 Seconds between frames in interval mode
detail string "standard" Vision analysis level
deduplicate bool true Remove near-duplicate frames via dHash
provider string null Override vision provider
force_refresh bool false Bypass cache

analyze_moment

Deep-dive analysis on a specific time range.

Parameter Type Default Description
source string required URL or local file path
start float required Start time in seconds
end float required End time in seconds
dense bool true Extract 1 frame per second in the range
detail string "detailed" Vision analysis level
provider string null Override vision provider
force_refresh bool false Bypass cache

get_frame_at

Get a single frame at a specific timestamp, optionally analyzed by AI.

Parameter Type Default Description
source string required URL or local file path
timestamp float required Time in seconds
analyze bool true Run AI vision analysis
provider string null Override vision provider
force_refresh bool false Bypass cache

get_metadata

Fetch video metadata without downloading the full video.

Parameter Type Default Description
source string required URL or local file path
include list null Specific fields to return — "title", "duration", "channel", "description", "thumbnail", "chapters", "tags", "view_count". Returns all if omitted.

Supported Platforms

VideoScan uses yt-dlp under the hood, which supports 1000+ video platforms including:

  • YouTube, YouTube Shorts, YouTube Live
  • Vimeo, Dailymotion, Twitch
  • Twitter/X, Instagram, TikTok, Facebook
  • Reddit, LinkedIn, Pinterest
  • BBC iPlayer, CNN, NBC, CBS
  • SoundCloud, Bandcamp (audio)
  • And hundreds more — see the yt-dlp supported sites list

Local files in any format supported by ffmpeg (mp4, mov, avi, mkv, webm, mp3, wav, etc.) are also supported.

Cost Estimates

Costs depend on your chosen provider and usage:

Operation Provider Approx. Cost
Vision analysis OpenAI GPT-4o ~$0.015 per frame
Vision analysis Anthropic Claude ~$0.024 per frame
Vision analysis Google Gemini ~$0.002 per frame
Transcription OpenAI Whisper ~$0.006 per minute

A typical 10-minute video analyzed with analyze_video (30 frames + transcription) costs approximately $0.45–$0.51 with OpenAI.

Development

git clone https://github.com/your-org/videoscan-mcp
cd videoscan-mcp
pip install -e ".[dev]"
pytest

License

MIT License — see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

videoscan_mcp-0.1.0.tar.gz (22.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

videoscan_mcp-0.1.0-py3-none-any.whl (26.7 kB view details)

Uploaded Python 3

File details

Details for the file videoscan_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: videoscan_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 22.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for videoscan_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 37eeb1d0b0eb19bad49b3ce8ceced50992221b0495f43810fa534cab21a0b421
MD5 b3434c74ce3f7ad8d704c2d080c3351a
BLAKE2b-256 b2919f6ed78329ad9f80bc629177fa4606e2b395ad3185d9fb2b3c360505f54d

See more details on using hashes here.

File details

Details for the file videoscan_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: videoscan_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 26.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for videoscan_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3aaeff4175e4d2a9a5a1772fac332e90120441c5b5ad626ef5608c354017fbf7
MD5 4aed22335b6059a6ec40c09c67fa7966
BLAKE2b-256 460c498406c33321e9cd6aa4191f10aec06e950c75e0cb4966c825e22f0b7bc9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page