Skip to main content
Glama

Your AI can read the web.
Now it can also watch it.

npx vidlens-mcp setup
  • Research video: search, transcribe, compare, and cite YouTube and public social video.

  • Build a local library: import once, then search transcripts, comments, frames, and OCR without fetching the same video again.

  • Inspect visual evidence: find the exact frame, timestamp, match reason, and source in a visual gallery plus structured client output.

VidLens is an MCP server that gives your AI agent eyes on video — YouTube, X, TikTok, Instagram, other video pages, or a file on your disk. Paste a link and ask a question. VidLens reads the transcript, looks at the frames, and answers with timestamps you can check. Everything it ingests lands in a library on your own machine, so your agent never has to watch the same video twice.

No API keys to start. Works in Claude Desktop, Claude Code, and Codex. Capable clients can turn VidLens's structured results into native charts, cards, tables, and visual reports in their own response surfaces.

Watch VidLens in action


Related MCP server: @kirbah/mcp-youtube

Try it

Once VidLens is set up, paste any of these into your AI client:

"Search YouTube for M5 Max MacBook Pro reviews. What do reviewers agree on, and where do they disagree?"

VidLens searches, reads the transcripts across reviewers, and synthesizes consensus and disagreement with sources and timestamps.

"Transcribe this video and summarize it: https://x.com/username/status/123..."

A single public X, Instagram, or TikTok video URL usually needs no API key at all. VidLens fetches it, transcribes it, and keeps the transcript so you can ask follow-up questions later — in this session or any future one.

"Find the frame in this video where they show the benchmark chart."

Visual search looks at what is on screen — slides, charts, whiteboards, product shots — and shows the actual frame image with its timestamp in the local browser gallery, not just a text guess.

Native client presentation

VidLens returns portable structured evidence: sources, timestamps, scores, OCR, descriptions, provenance, and limitations. Codex, Claude, and other capable clients can compose that evidence into their own native charts, comparison cards, tables, and visual reports.

The presentation belongs to the client rather than an embedded VidLens UI. For extracted-frame inspection, searchVisualContent can also open the browser gallery.


How it works

Video sources go in on the left. VidLens ingests them through whichever route works — the YouTube API when a key is configured, yt-dlp, or direct page extraction — and stores the results in a local library: transcripts, frames, and embeddings. Your agents query that library from any MCP client.

Two honesty guarantees are built in:

  • Fallbacks, not failures. Every YouTube data tool tries multiple routes before giving up, so a missing key or an exhausted quota degrades gracefully instead of breaking.

  • Provenance on responses. Tool responses report which route served the data and whether anything was partial. No silent degradation.

Everything lives in one directory on your disk. No external database, no Docker. Back it up by copying it; delete it to start fresh.


Install

npx vidlens-mcp setup

The wizard detects Claude Desktop, Claude Code, and Codex, checks the local dependencies VidLens needs, and offers one simple choice:

  • Free setup (recommended): no API keys. YouTube search, transcripts, metadata, and the local library work immediately.

  • Enhanced setup: add optional APIs, speech-to-text, web search, or browser cookies one at a time. Press Enter to skip anything you do not need; saved values are kept and never shown.

Press Enter to choose Free, or run npx vidlens-mcp setup --enhanced whenever you want Enhanced capabilities. For Claude Code, setup also registers VidLens in the user MCP registry, installs the shared VidLens workflow skill, and checks the result with claude mcp list when possible.

Manual configuration

Claude Desktop — add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "vidlens-mcp": {
      "command": "npx",
      "args": ["-y", "vidlens-mcp", "serve"]
    }
  }
}

Claude Code — prefer the wizard:

npx vidlens-mcp setup --client claude_code
claude mcp list

If you configure it by hand instead, add the same mcpServers.vidlens-mcp entry to ~/.claude.json.

Codex — use the setup helper so the MCP server and bundled VidLens skills are registered together:

npx vidlens-mcp setup --client codex

Restart your client

Fully quit and reopen Claude Desktop (⌘Q, not just close the window) — MCP servers load on startup. For Claude Code, start a new session or run /mcp after setup.

From a local checkout

npm install in a checkout does not put the binary on your PATH. Use npm run setup from the checkout, or npm install -g . / npm link if you want the bare vidlens-mcp command while developing.


Your library

VidLens is durable memory for video work, not a per-session scratchpad. Everything you import persists on disk under VIDLENS_DATA_DIR: transcript collections, comment collections, downloaded media, and visual indexes. Even the active collection is remembered.

Recall it in one call. At the start of a session, recallWorkspace returns a compact digest of everything already stored, so an agent knows what it has before searching or importing again. Tool descriptions carry the same reminder into every client, so agents check first instead of re-fetching.

Reuse by URL or asset key. An imported social video's transcript can be pulled up again by its original URL or by its asset key — no re-download, no re-transcription.

One shared library across agents. The default data directory is the same for every client, so Claude Desktop, Claude Code, and Codex all share one library — import a video in one, search it from another.

⚠️ Do not put VIDLENS_DATA_DIR inside Dropbox, iCloud, Google Drive, or any file-sync folder. VidLens uses SQLite (with WAL), and live databases under a file syncer get corrupted or spawn conflict copies. Keep the data dir on a local disk — the default location already does.


Beyond YouTube

For X, Instagram, TikTok, and generic video pages, VidLens uses a capability ladder: it takes the cheapest route that works, and an API key is an uplift, not a prerequisite.

Route

Cost

Best for

What happens

Local reuse

Free

Anything imported before

recallWorkspace finds the stored transcript or media; nothing is re-fetched

Public direct URL

Free

One X status, Instagram reel/post, or TikTok video

yt-dlp tries the canonical post URL anonymously; ffmpeg and local or configured STT handle media with no captions

Browser-assisted

Free with a supported host

Finding or verifying a post, or using an existing signed-in session

Your client's browser control captures the canonical URL and visible metadata, then hands the URL back to VidLens

Local-file handoff

Free

A video you are permitted to save

Import the saved file for transcription and visual indexing

API-enhanced

Provider pricing

Bulk, unattended, or repeatable discovery

Configured ScrapeCreators, Brave, SerpAPI, YouTube, Gemini, or OpenAI capabilities are selected automatically

Three caveats, stated plainly:

  • Browser assistance is host-level. The MCP server does not control a browser itself; it relies on whatever browser tooling your client provides, which differs by host.

  • Seeing a video is not the same as exporting it. A post that plays in a browser does not guarantee automatic media export.

  • Concrete URLs only. VidLens imports specific post or video URLs, never profiles, explore pages, hashtags, or popularity pages.

For social and local video work beyond plain download, install ffmpeg (brew install ffmpeg on macOS) — frame extraction, visual indexing, and STT audio chunking need it.


The tools — 47 across 11 modules

Explore — YouTube discovery and research (1)

Tool

What it does

exploreYouTube

Intent-aware search with multi-query ranking, transcript summaries, structured benchmark data, and background indexing. One call replaces 5–8 individual tool calls.

Core — video and channel intelligence (7)

Tool

What it does

findVideos

Search YouTube by query with metadata

inspectVideo

Deep metadata — tags, engagement, language, category

inspectChannel

Channel stats, description, recent uploads

listChannelCatalog

Browse a channel's full video library

readTranscript

Full transcript with timestamps and chapters

readComments

Top comments with likes and engagement

expandPlaylist

List all videos in any playlist

Knowledge base — semantic transcript search (7)

Tool

What it does

importPlaylist

Index an entire playlist's transcripts

importVideos

Index specific videos by URL or ID

searchTranscripts

Natural-language search across indexed content

listCollections

Browse your indexed collections

setActiveCollection

Scope searches to one collection

clearActiveCollection

Search across all collections

removeCollection

Delete a collection and its index

Sentiment and analysis (4)

Tool

What it does

measureAudienceSentiment

Comment sentiment with themes and risk signals

analyzeVideoSet

Compare performance across multiple videos

analyzePlaylist

Playlist-level engagement analytics

buildVideoDossier

Complete single-video deep analysis

Creator intelligence (4)

Tool

What it does

scoreHookPatterns

Analyze what makes video openings work

researchTagsAndTitles

Tag and title optimization insights

compareShortsVsLong

Short-form vs long-form performance

recommendUploadWindows

Best times to publish for engagement

Tool

What it does

discoverNicheTrends

Momentum, saturation, and content gaps in any topic

exploreNicheCompetitors

Channel landscape and top performers

Universal video sources (5)

Tool

What it does

inspectVideoSource

Resolve YouTube, X, Instagram, TikTok, generic URLs, and local files into source metadata and capability flags

searchVideoSources

Search native YouTube and local assets, with ScrapeCreators support for TikTok/Instagram plus configurable Brave/SerpAPI/DuckDuckGo fallback

searchSocialTrends

Search social platforms through ScrapeCreators; returns a ranked list with engagement metrics and importable URLs where available

importVideoSources

Import URLs or local files into the local media store, optionally building a visual index or transcript

transcribeVideoSource

Transcribe YouTube, social/generic URLs, and local files via native captions or configured STT

Media assets (5)

Tool

What it does

downloadAsset

Download or ingest video, audio, or thumbnails from any supported source

listMediaAssets

Browse stored media files

removeMediaAsset

Clean up downloaded assets

extractKeyframes

Extract key frames from videos

mediaStoreHealth

Storage usage and diagnostics

Visual search and evidence (3)

Tool

What it does

indexVisualContent

Extract frames; run Apple Vision OCR and feature prints, Gemini frame descriptions, and Gemini semantic embeddings

searchVisualContent

Search frames by meaning and text; returns timestamped evidence and can open the external browser gallery

findSimilarFrames

Image-to-image frame similarity using Apple Vision feature prints

Visual search is a dedicated index, separate from transcripts. Every match includes its timestamp, source video, OCR text, and visual description. Local frame paths and file: URLs are removed from MCP results; the browser gallery reads the images locally without exposing those paths to the client.

Comment knowledge base (6)

Tool

What it does

importComments

Index a video's comments for search

searchComments

Natural-language search over the comment corpus

listCommentCollections

Browse comment collections

setActiveCommentCollection

Scope comment searches

clearActiveCommentCollection

Search all comment collections

removeCommentCollection

Delete a comment collection

Diagnostics (3)

Tool

What it does

recallWorkspace

Session-start digest of everything already imported — call first to avoid re-importing

checkSystemHealth

Full system diagnostic report

checkImportReadiness

Validate before importing content


Optional API keys

VidLens works without any keys. Add them for scale and reliability:

Key

What it unlocks

Free?

Where

YOUTUBE_API_KEY

Better metadata, comment API, YouTube API search

Google quota applies

Google Cloud Console → enable YouTube Data API v3 → create API key

GEMINI_API_KEY

Higher-quality embeddings for semantic and visual search, frame descriptions

Provider pricing and limits apply

Google AI Studio

OPENAI_API_KEY

Optional STT provider for transcription

Paid

OpenAI Platform

SCRAPECREATORS_API_KEY

Direct social search and trending for TikTok, Instagram, Threads, Pinterest, Reddit, and supported endpoints

Provider pricing applies

ScrapeCreators

BRAVE_API_KEY / SERPAPI_KEY

Structured web search for social and generic URL discovery

Varies

Brave Search API or SerpAPI

⚠️ The YouTube and Gemini keys are separate keys from separate Google services. A Gemini key will not work for YouTube API calls, and vice versa.

# Free setup asks for no keys.
npx vidlens-mcp setup

# Enhanced setup optionally prompts for keys, STT, web search, and cookies.
npx vidlens-mcp setup --enhanced

# Or pass everything non-interactively.
npx vidlens-mcp setup \
  --youtube-api-key YOUR_YOUTUBE_KEY \
  --gemini-api-key YOUR_GEMINI_KEY \
  --stt-provider auto \
  --cookies-from-browser chrome

Cookies and speech-to-text

For platforms that rate-limit anonymous access, the wizard can persist cookies by browser profile or file path:

npx vidlens-mcp setup --cookies-from-browser chrome --cookies-profile Default
npx vidlens-mcp setup --x-cookies-file /path/to/x-cookies.txt

Or via environment variables: VIDLENS_COOKIES_FROM_BROWSER, VIDLENS_X_COOKIES_FILE, VIDLENS_INSTAGRAM_COOKIES_FILE, VIDLENS_TIKTOK_COOKIES_FILE.

STT selection is automatic: local whisper.cpp first, then Gemini, then OpenAI. Override with VIDLENS_STT_PROVIDER=whisper-cpp|gemini|openai|none|auto. When the wizard asks, pressing Enter for auto is the right answer for most people.


CLI

npx vidlens-mcp               # Start MCP server (stdio)
npx vidlens-mcp serve         # Start MCP server (explicit)
npx vidlens-mcp setup         # Configure clients, keys, STT, cookies
npx vidlens-mcp doctor        # Run diagnostics
npx vidlens-mcp doctor --no-live   # Diagnostics without network checks
npx vidlens-mcp update-deps   # Refresh managed yt-dlp and Deno helpers
npx vidlens-mcp version       # Print version

doctor checks Node.js version, yt-dlp freshness, STT and web-search providers, API key validity, data directory health, and MCP client registration for Claude Desktop, Claude Code, and Codex.


Requirements

Requirement

Status

Notes

Node.js ≥ 22

Required

Uses node:sqlite — check with node --version

yt-dlp

Auto-installed

Downloaded during npx vidlens-mcp setup

ffmpeg + ffprobe

Recommended

Needed for media validation, frame extraction, visual indexing, and STT audio processing

YouTube API key

Optional

Better metadata and comment access

Gemini API key

Optional

Better embeddings and frame descriptions

macOS

Optional

Apple Vision powers native OCR and image similarity; other platforms can use Gemini descriptions when configured


Security and privacy

  • Your library — transcripts, frames, embeddings, media — is stored locally and stays on your machine. Network calls go only to the sources you query and the APIs you configure.

  • Setup stores configured keys in your local MCP client configuration. Prefer the interactive Enhanced setup, which masks key entry; keys supplied as CLI flags may remain in shell history. Error messages pass through a secret redactor so keys and cookie paths are not echoed in tool output.

  • Fetches of channel pages and generic URLs reject private, link-local, and loopback addresses (SSRF guard). Escape hatch for intentional local use: VIDLENS_ALLOW_PRIVATE_URLS=1.


Troubleshooting

"Tool not found" in Claude Desktop. Fully quit (⌘Q) and reopen. MCP servers load only on startup.

"YOUTUBE_API_KEY not configured" warning. Informational, not an error. VidLens works without it.

"API_KEY_SERVICE_BLOCKED". The key is not allowed to call the requested Google service. In Google Cloud Console, enable the YouTube Data API v3 and allow that API in the key's API restrictions. Keep appropriate application restrictions for where you run VidLens; do not make the key unrestricted unless you are only doing a short diagnostic and will restrict it again immediately.

Gemini key doesn't work for YouTube. They are separate services with separate keys. See Optional API keys.

Social video downloads but visual analysis fails. Install ffmpeg, then re-run setup:

brew install ffmpeg
npx vidlens-mcp doctor --no-live

downloadAsset can often fetch a video without ffmpeg, but indexVisualContent, extractKeyframes, media validation, and STT audio processing need ffmpeg or ffprobe.

Anything else:

npx vidlens-mcp doctor

License

MIT

GitHub · npm · Model Context Protocol

1.5.3 agent contract changes

listChannelCatalog accepts a bounded scanLimit and refresh: true for fresh discovery. maxResults caps returned matches, not the initial uploads window. Inspect the returned coverage and format evidence: duration alone does not prove that a short video is a YouTube Short, and unresolved formats are excluded from an exclusive Shorts/long-form request.

readTranscript uses zero-based UTF-16 text offsets, not seconds or numbers of lines. For a full transcript, start with mode: "full", offset: 0, limit: 15000, then follow longVideoHandling.pagination.nextOffset until hasMore is false. A page may be one code unit shorter to avoid splitting a Unicode surrogate pair. The effective offset is returned if a caller starts inside a pair. Limits are integers from 1,000 through 64,000. Without an explicit offset or limit, a full transcript larger than 32,000 code units retains its disclosed key-moments fallback.

Native MCP calls now reject unexpected argument names and invalid integer pagination rather than silently ignoring typos. searchVisualContent and findSimilarFrames return structured results without opening a browser by default; explicitly request openGallery: true to create and open a gallery. Client approval policies still apply.

Optional typed fields must be omitted rather than sent as null. Only pass dryRun when it appears in that tool's schema. Classification-based analytics now include unknown formats; a duration-only trend result cannot establish Shorts membership, and comparisons can be partial when the provider supplies no date or engagement data. A missing comparison cohort no longer receives a fabricated percentage recommendation.

Available Tools

41 tools
analyzePlaylistC

Expand and analyze a playlist in one call with partial success and aggregate benchmarks. [~5-20s, scales with playlist size]

Inputs: playlistUrlOrId (required), analyses (required), maxVideos, commentsSampleSize, +2 more.

analyzeVideoSetB

Run multiple analyses across a video set with partial success, item-level errors, and provenance. [~5-20s, scales with video count]

Inputs: videoIdsOrUrls (required), analyses (required), commentsSampleSize, transcriptMode, +1 more.

buildVideoDossierB

Build a one-shot video dossier with core metadata/transcript readiness, optionally extended with comments, sentiment, and provenance. [~3-10s]

Inputs: videoIdOrUrl (required), commentSampleSize, includeComments, includeSentiment, +2 more.

checkImportReadinessA

Diagnose whether a video is importable, including transcript availability, sparse-transcript warnings, and yt-dlp/API issues. [~1-3s]

Inputs: videoIdOrUrl (required), language, dryRun.

checkSystemHealthA

Check setup and provider health: yt-dlp, YouTube API, Gemini embeddings, and local storage. [~3-10s]

Inputs: runLiveChecks, dryRun.

clearActiveCollectionA

Clear the active collection so transcript search fans back out across all collections. [~instant]

Inputs: no named parameters.

clearActiveCommentCollectionA

Clear the active comment collection so comment search fans back out across all comment collections. [~instant]

Inputs: no named parameters.

compareShortsVsLongC

Compare recent Shorts vs long-form performance for a channel and suggest a format mix. [~3-10s]

Inputs: channelIdOrHandleOrUrl (required), lookbackDays, dryRun.

discoverNicheTrendsA

Discover what's trending in a niche right now. Returns top-performing and recent videos, momentum signals (accelerating/steady/decelerating), saturation analysis, content gap opportunities, keyword patterns, and format breakdown. Grounded in YouTube search data with honest limitations disclosed. [~5-15s]

Inputs: niche (required), regionCode, maxResults, lookbackDays, +1 more.

downloadAssetA

Download a YouTube video, audio track, or thumbnail to local storage. Returns asset manifest entry with file path. Does NOT perform visual indexing — this is honest file storage. [~30-120s, downloads media]

Inputs: videoIdOrUrl (required), format (required), maxSizeMb.

expandPlaylistC

Expand a playlist into individual videos for downstream analysis and batch workflows. [~1-3s]

Inputs: playlistUrlOrId (required), maxVideos, includeVideoMeta, dryRun.

exploreNicheCompetitorsA

Discover active channels in a niche by analyzing who ranks in YouTube search results. Returns channel-level stats, top videos, and a landscape summary. Useful for competitive reconnaissance before entering a niche. [~5-20s]

Inputs: niche (required), regionCode, maxChannels, dryRun.

exploreYouTubeA

ALWAYS use this tool FIRST when the user wants to find, discover, or explore YouTube videos. Do NOT use web search for YouTube video discovery — use this tool instead. Searches YouTube directly with intelligent multi-query ranking and parallel enrichment. Returns ranked videos with transcript summaries, key moments, and readiness for follow-up. IMPORTANT: When results contain benchmark scores, statistics, or comparisons, ALWAYS create visual charts and infographics (bar charts, comparison tables) from the data immediately — do not wait for the user to ask. Use 'specific' mode to find one best video. Use 'explore' for topic discovery across creators. Depth: 'quick' for metadata, 'standard' for key moments + transcript summaries, 'deep' for background indexing. [~2s quick, ~5-10s standard, ~15-30s deep]

Inputs: query, searches, mode, creator, +8 more.

extractKeyframesA

Extract keyframe images from a locally downloaded video at regular intervals using ffmpeg. Requires the video to be downloaded first via downloadAsset. Does NOT do visual search or classification — produces raw frame images. [~30-60s, requires ffmpeg]

Inputs: videoIdOrUrl (required), intervalSec, maxFrames, imageFormat, +1 more.

findSimilarFramesA

Find frames that visually look like a reference frame using Apple Vision image feature prints. Accepts a frame assetId or a direct framePath and returns image-backed matches. [~30-60s, vision comparison]

Inputs: assetId, framePath, videoIdOrUrl, maxResults, +2 more.

findVideosB

Search YouTube videos by intent. Returns compact ranked results with provenance and engagement hints. [~1-3s]

Inputs: query (required), maxResults, order, regionCode, +5 more.

importCommentsA

Import a video's comments into the local comment knowledge base for semantic search. Fetches comments via the existing comment pipeline and indexes them for searchComments. [~3-10s]

Inputs: videoIdOrUrl (required), collectionId, maxTopLevel, includeReplies, +5 more.

importPlaylistC

Import a playlist into the local transcript knowledge base for semantic search in Claude Desktop. [~5-30s, ~2s per video]

Inputs: playlistUrlOrId (required), collectionId, maxVideos, chunkStrategy, +10 more.

importVideosB

Import one or more videos into a local transcript collection for later semantic search. [~5-20s, ~2s per video]

Inputs: videoIdsOrUrls (required), collectionId, chunkStrategy, chunkSizeSec, +9 more.

indexVisualContentA

Build a real visual index for a video using extracted frames, Apple Vision OCR, Apple Vision feature prints, and optional Gemini frame descriptions. Returns frame evidence with local image paths. [~30-120s, downloads + OCR + vision]

Inputs: videoIdOrUrl (required), intervalSec, maxFrames, imageFormat, +7 more.

inspectChannelB

Inspect a channel with summary stats and posting cadence heuristics. [~3-10s]

Inputs: channelIdOrHandleOrUrl (required), dryRun.

inspectVideoB

Inspect a single video with compact metadata, normalized ratios, and transcript availability. [~1-3s]

Inputs: videoIdOrUrl (required), includeTranscriptMeta, includeEngagementRatios, dryRun.

listChannelCatalogC

List a channel's recent catalog in compact creator-analysis shape. [~3-10s]

Inputs: channelIdOrHandleOrUrl (required), maxResults, sortBy, includeShorts, +3 more.

listCollectionsB

List local transcript collections, active search focus, and indexed video/chunk counts. [~instant]

Inputs: includeVideoList.

listCommentCollectionsC

List local comment collections, active search focus, and indexed comment counts. [~instant]

Inputs: includeVideoList.

listMediaAssetsB

List locally stored media assets. Filter by video or kind. Shows file paths, sizes, and manifest metadata. [~instant]

Inputs: videoIdOrUrl, kind, limit.

measureAudienceSentimentC

Heuristic audience sentiment analysis from comments with themes, risk signals, and quote samples. [~3-10s]

Inputs: videoIdOrUrl (required), sampleSize, includeThemes, includeRepresentativeQuotes, +1 more.

mediaStoreHealthB

Check health of the local media store: disk usage, asset counts, ffmpeg/yt-dlp availability. [~instant]

Inputs: no named parameters.

readCommentsC

Read top-level comments with optional replies and structured provenance. [~1-3s]

Inputs: videoIdOrUrl (required), maxTopLevel, includeReplies, maxRepliesPerThread, +3 more.

readTranscriptB

Read transcript in summary, key moments, chapters, or paginated full mode with long-video safeguards. [~1-3s]

Inputs: videoIdOrUrl (required), language, mode, includeTimestamps, +4 more.

recommendUploadWindowsB

Recommend upload windows from recent publishing history for a given timezone. [~3-10s]

Inputs: channelIdOrHandleOrUrl (required), timezone (required), lookbackDays, dryRun.

removeCollectionB

Delete a local transcript collection and its search index. [~instant]

Inputs: collectionId (required).

removeCommentCollectionB

Delete a local comment collection and its search index. [~instant]

Inputs: collectionId (required).

removeMediaAssetB

Remove stored media assets. Specify assetId to remove one, or videoIdOrUrl to remove all assets for a video. [~instant]

Inputs: assetId, videoIdOrUrl, deleteFiles.

researchTagsAndTitlesC

Research title structures, keywords, and tag patterns around a seed topic. [~3-10s]

Inputs: seedTopic (required), regionCode, language, maxExamples, +1 more.

scoreHookPatternsC

Heuristically score first-30-second hooks across one or more videos. [~3-10s, ~1s per video]

Inputs: videoIdsOrUrls (required), hookWindowSec, dryRun.

searchCommentsA

Search imported comment collections with ranked results. Returns matching comments with author, like count, and relevance score. Uses active comment collection by default. [~instant]

Inputs: query (required), collectionId, maxResults, minScore, +2 more.

searchTranscriptsC

Search imported transcript-text collections with active-collection focus by default and return ranked timestamped chunks. [~instant]

Inputs: query (required), collectionId, maxResults, minScore, +2 more.

searchVisualContentA

Search the actual visual content of a video or your indexed frame library. Uses Apple Vision OCR, optional Gemini frame descriptions, and optional Gemini semantic embeddings. Always returns frame/image evidence with timestamps. [~1-3s if indexed, ~60-120s if auto-indexing]

Inputs: query (required), videoIdOrUrl, maxResults, minScore, +10 more.

setActiveCollectionA

Set the default collection that transcript search should focus on when collectionId is omitted. [~instant]

Inputs: collectionId (required).

setActiveCommentCollectionA

Set the default comment collection that searchComments should focus on when collectionId is omitted. [~instant]

Inputs: collectionId (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.7/5.0

    Scored across 41 tools

    Disambiguation2/5

    Several tools have overlapping purposes, e.g., exploreYouTube vs findVideos both search YouTube; analyzePlaylist vs expandPlaylist vs importPlaylist may be confused; extractKeyframes vs indexVisualContent vs searchVisualContent overlap in visual processing. Search-related tools for transcripts, comments, and visual content are somewhat distinct but the active-collection setters/clearers add confusion.

    Naming Consistency2/5

    Naming is inconsistent: mix of camelCase (clearActiveCollection, setActiveCollection, buildVideoDossier) and snake_case (checkImportReadiness, downloadAsset, searchComments). Verbs vary (check, build, list, find, inspect, read, score, measure, analyze) without a clear pattern. Some tools use nouns like 'mediaStoreHealth' which is inconsistent with verb-first conventions.

    Tool Count1/5

    With 41 tools, the server has a heavy tool surface for what is essentially a YouTube media analysis and knowledge base tool. Many tools are highly specialized and could be consolidated (e.g., multiple playlist and import tools, multiple collection management tools). This will likely overwhelm an agent and increase latency.

    Completeness3/5

    The set covers core workflows: video discovery, import, transcript analysis, comment analysis, visual content, playlist handling, and media asset management. However, there are gaps: no tool for updating or deleting imported transcripts/collections beyond removal? Actually removeCollection exists, but there is no tool to update a video's metadata or re-index. Also, no tool to scrape comments for a single video without import? readComments exists but no search without import seems incomplete.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers