{"name":"io.github.thatsrajan/vidlens-mcp","slug":"thatsrajan-vidlens-mcp","title":null,"description":"Video as a queryable local asset for AI agents — 47 tools for YouTube, social, and local media.","url":"https://mcp.market/server/thatsrajan-vidlens-mcp","rating":null,"grade":"D","score":42,"certified":false,"status":"active","category":"media","tags":["media"],"presence":{"score":35,"stars":35,"forks":5,"downloads_week":112,"last_push_at":"2026-08-22T03:36:08.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/thatsrajan/vidlens-mcp","website":null,"version":"1.4.1","remotes":[],"packages":[{"registryType":"npm","identifier":"vidlens-mcp","version":"1.4.1","transport":{"type":"stdio"},"environmentVariables":[{"description":"YouTube Data API v3 key (optional — works without it via fallback scraping)","format":"string","isSecret":true,"name":"YOUTUBE_API_KEY"},{"description":"Google Gemini API key for AI-powered visual descriptions (optional)","format":"string","isSecret":true,"name":"GEMINI_API_KEY"},{"description":"OpenAI API key for optional speech-to-text transcription of imported non-YouTube sources","format":"string","isSecret":true,"name":"OPENAI_API_KEY"},{"description":"ScrapeCreators API key for optional social trend search across TikTok, Instagram, Threads, Pinterest, Reddit, and supported endpoints","format":"string","isSecret":true,"name":"SCRAPECREATORS_API_KEY"},{"description":"Brave Search API key for optional social/generic video URL discovery","format":"string","isSecret":true,"name":"BRAVE_API_KEY"}]}],"tools":[{"name":"analyzePlaylist","description":"Expand and analyze a playlist in one call with partial success and aggregate benchmarks. [~5-20s, scales with playlist size]","write_action":false,"price_micros":0,"input_schema":null},{"name":"analyzeVideoSet","description":"Run multiple analyses across a video set with partial success, item-level errors, and provenance. [~5-20s, scales with video count]","write_action":true,"price_micros":0,"input_schema":null},{"name":"buildVideoDossier","description":"Build a one-shot video dossier with core metadata/transcript readiness, optionally extended with comments, sentiment, and provenance. [~3-10s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"checkImportReadiness","description":"Diagnose whether a video is importable, including transcript availability, sparse-transcript warnings, and yt-dlp/API issues. [~1-3s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"checkSystemHealth","description":"Check setup and provider health: yt-dlp, YouTube API, Gemini embeddings, and local storage. [~3-10s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"clearActiveCollection","description":"Clear the active collection so transcript search fans back out across all collections. [~instant]","write_action":false,"price_micros":0,"input_schema":null},{"name":"clearActiveCommentCollection","description":"Clear the active comment collection so comment search fans back out across all comment collections. [~instant]","write_action":false,"price_micros":0,"input_schema":null},{"name":"compareShortsVsLong","description":"Compare recent Shorts vs long-form performance for a channel and suggest a format mix. [~3-10s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"discoverNicheTrends","description":"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]","write_action":false,"price_micros":0,"input_schema":null},{"name":"downloadAsset","description":"Download or ingest a video, audio track, or thumbnail to local storage. Supports YouTube, X/Twitter, Instagram, TikTok, generic URLs via yt-dlp, and local video files for video ingestion. Does NOT perform visual indexing. Downloaded assets persist across sessions — call recallWorkspace or listMediaAssets first to avoid re-downloading. [~30-120s, downloads media]","write_action":false,"price_micros":0,"input_schema":null},{"name":"expandPlaylist","description":"Expand a playlist into individual videos for downstream analysis and batch workflows. [~1-3s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"exploreNicheCompetitors","description":"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]","write_action":false,"price_micros":0,"input_schema":null},{"name":"exploreSourcedVideos","description":"Opt-in universal exploration surface that routes through source search and merges platform discovery results. Set VIDLENS_ENABLE_UNIVERSAL_EXPLORE=1 to expose. [~1-5s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"exploreYouTube","description":"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, sta","write_action":false,"price_micros":0,"input_schema":null},{"name":"extractKeyframes","description":"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]","write_action":false,"price_micros":0,"input_schema":null},{"name":"findSimilarFrames","description":"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]","write_action":false,"price_micros":0,"input_schema":null},{"name":"findSourcedVideos","description":"Opt-in universal video search across YouTube, local assets, and configured social/web fallback providers. Set VIDLENS_ENABLE_UNIVERSAL_EXPLORE=1 to expose. [~1-5s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"findVideos","description":"Search YouTube videos by intent. Returns compact ranked results with provenance and engagement hints. [~1-3s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"importComments","description":"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. Imports persist across sessions — call recallWorkspace or listCommentCollections first to avoid re-importing. [~3-10s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"importPlaylist","description":"Import a playlist into the local transcript knowledge base for semantic search in Claude Desktop. Unlike raw yt-dlp, imports persist across sessions and become searchable — call recallWorkspace or listCollections first to avoid re-importing what you already have. [~5-30s, ~2s per video]","write_action":false,"price_micros":0,"input_schema":null},{"name":"importVideoSources","description":"Import one or more video URLs or local files into the local VidLens media store, optionally building a visual index or transcript. Supports YouTube, X/Twitter, Instagram, TikTok, generic URLs via yt-dlp, and local video files via ffmpeg. [~30-180s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"importVideos","description":"Import one or more videos into a local transcript collection for later semantic search. Unlike raw yt-dlp, imports persist across sessions and become searchable — call recallWorkspace or listCollections first to avoid re-importing what you already have. [~5-20s, ~2s per video]","write_action":false,"price_micros":0,"input_schema":null},{"name":"indexVisualContent","description":"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. The index persists across sessions and is queryable via searchVisualContent — call recallWorkspace first to avoid re-indexing. [~30-120s, downloads + OCR + vision]","write_action":false,"price_micros":0,"input_schema":null},{"name":"inspectChannel","description":"Inspect a channel with summary stats and posting cadence heuristics. [~3-10s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"inspectVideo","description":"Inspect a single video with compact metadata, normalized ratios, and transcript availability. [~1-3s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"inspectVideoSource","description":"Resolve any supported video input (YouTube, X/Twitter, Instagram, TikTok, generic URL, or local file) into VidLens source metadata and capability flags. Works for Claude and Codex through the same MCP server. [~instant]","write_action":false,"price_micros":0,"input_schema":null},{"name":"listChannelCatalog","description":"List a channel's recent catalog in compact creator-analysis shape. [~3-10s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"listCollections","description":"List local transcript collections, active search focus, and indexed video/chunk counts. [~instant]","write_action":false,"price_micros":0,"input_schema":null},{"name":"listCommentCollections","description":"List local comment collections, active search focus, and indexed comment counts. [~instant]","write_action":false,"price_micros":0,"input_schema":null},{"name":"listMediaAssets","description":"List locally stored media assets. Filter by video or kind. Shows file paths, sizes, and manifest metadata. [~instant]","write_action":false,"price_micros":0,"input_schema":null},{"name":"measureAudienceSentiment","description":"Heuristic audience sentiment analysis from comments with themes, risk signals, and quote samples. [~3-10s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"mediaStoreHealth","description":"Check health of the local media store: disk usage, asset counts, ffmpeg/yt-dlp availability. [~instant]","write_action":false,"price_micros":0,"input_schema":null},{"name":"readComments","description":"Read top-level comments with optional replies and structured provenance. [~1-3s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"readTranscript","description":"Read transcript in summary, key moments, chapters, or paginated full mode with long-video safeguards. [~1-3s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"recallWorkspace","description":"Recall what VidLens already has stored from previous sessions — imported transcript and comment collections, downloaded media assets, and visual indexes. CALL THIS FIRST in a new session before searching or importing: unlike raw yt-dlp, VidLens imports persist across sessions and become searchable, so re-importing wastes time and API quota. Returns a compact digest with a hint on what to do next. ","write_action":false,"price_micros":0,"input_schema":null},{"name":"recommendUploadWindows","description":"Recommend upload windows from recent publishing history for a given timezone. [~3-10s]","write_action":true,"price_micros":0,"input_schema":null},{"name":"removeCollection","description":"Delete a local transcript collection and its search index. [~instant]","write_action":true,"price_micros":0,"input_schema":null},{"name":"removeCommentCollection","description":"Delete a local comment collection and its search index. [~instant]","write_action":true,"price_micros":0,"input_schema":null},{"name":"removeMediaAsset","description":"Remove stored media assets. Specify assetId to remove one, or videoIdOrUrl to remove all assets for a video. [~instant]","write_action":true,"price_micros":0,"input_schema":null},{"name":"researchTagsAndTitles","description":"Research title structures, keywords, and tag patterns around a seed topic. [~3-10s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"scoreHookPatterns","description":"Heuristically score first-30-second hooks across one or more videos. [~3-10s, ~1s per video]","write_action":false,"price_micros":0,"input_schema":null},{"name":"searchComments","description":"Search imported comment collections with ranked results. Returns matching comments with author, like count, and relevance score. Uses active comment collection by default. [~instant]","write_action":false,"price_micros":0,"input_schema":null},{"name":"searchSocialTrends","description":"Search social platforms through ScrapeCreators and return a playlist-like ranked list of posts/videos with engagement metrics and importable URLs where VidLens can ingest them. Supports TikTok, Instagram, Threads, Pinterest, Reddit, and handle-based X lookups when SCRAPECREATORS_API_KEY is configured. [~2-10s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"searchTranscripts","description":"Search imported transcript-text collections with active-collection focus by default and return ranked timestamped chunks. [~instant]","write_action":false,"price_micros":0,"input_schema":null},{"name":"searchVideoSources","description":"Search video sources across native YouTube, local VidLens assets, and capability-aware social/web fallback guidance. For X, Instagram, TikTok, and generic web pages, pass discovered URLs to importVideoSources/downloadAsset for reliable ingest. Material imported in previous sessions is already available — call recallWorkspace first to reuse it instead of re-fetching. [~1-5s]","write_action":false,"price_micros":0,"input_schema":null},{"name":"searchVisualContent","description":"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]","write_action":false,"price_micros":0,"input_schema":null},{"name":"setActiveCollection","description":"Set the default collection that transcript search should focus on when collectionId is omitted. [~instant]","write_action":false,"price_micros":0,"input_schema":null},{"name":"setActiveCommentCollection","description":"Set the default comment collection that searchComments should focus on when collectionId is omitted. [~instant]","write_action":false,"price_micros":0,"input_schema":null},{"name":"transcribeVideoSource","description":"Transcribe a YouTube, X/Twitter, Instagram, TikTok, generic URL, or local video source into the transcript knowledge base using native captions or the configured STT provider. [~30-180s]","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":42,"grade":"D","scanned_at":"2026-09-26T05:14:46.340Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-26T05:14:46.367Z","components":{"code":{"score":3,"max":25,"notes":["133 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":12,"max":15,"notes":["last push 35 days ago"]},"identity":{"score":6,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present"},{"id":"exec.shell-concat","severity":"high","component":"code","title":"Shell command built from a string (injection risk)","evidence":"dist/lib/cli-runtime.js: …_process\"); execSync(`npm install -g ${pkgName}`, { stdio: \"inherit\" }); …"},{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present","evidence":"package.json: …t && node dist/cli.js update-deps\", \"postinstall\": \"node -e \\\"console.log('\\\\nVidLens MCP …"}],"inputs":{"packages":[{"registryType":"npm","identifier":"vidlens-mcp","version":"1.4.1","found":true,"license":"MIT","hasInstallScripts":true,"dependencyCount":3,"publishedAt":"2026-07-09T12:23:51.607Z","repositoryUrl":"git+https://github.com/thatsrajan/vidlens-mcp.git","weeklyDownloads":112}],"repo":{"found":true,"owner":"thatsrajan","repo":"vidlens-mcp","archived":false,"pushedAt":"2026-08-22T03:36:08Z","stars":35,"forks":5,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/273704848?v=4","ownerCreatedAt":"2026-04-05T04:31:27Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/273704848?v=4&s=128","source":"github"},"presence":{"stars":35,"forks":5,"downloadsWeek":112,"license":"MIT","lastPushAt":"2026-08-22T03:36:08.000Z","score":35}}}},"grade_history":[],"reviews":[]}