vdl-mcp
vdl-mcp는 AI 어시스턴트를 Model Context Protocol을 통해 사용자 소유의 vdl 서버에 연결합니다. 진정한 강점은 Whisper 시너지에 있습니다:
**다운로드 → 전사 → 어시스턴트가 콘텐츠를 이해합니다.**
따라서 다음과 같은 요청을 할 수 있습니다:
"이 YouTube 동영상을 다운로드하고 요약해 줘."
"저 요리 클립을 가져와서 레시피를 목록으로 작성해 줘."
"이 인터뷰에서 X에 대해 뭐라고 했어?"
"이 강연의 오디오를 다운로드하고 핵심 포인트를 알려줘."
작동 방식
vdl의 REST API와 통신하고 기존 API 토큰으로 인증하는 작은 stdio MCP 서버입니다. vdl 내부에서는 아무것도 실행되지 않습니다.
도구 그룹은 안전한 기본값으로 전환 가능합니다:
그룹 | 도구 | 기본값 |
읽기 |
| ✅ 켜짐 |
다운로드 |
| ✅ 켜짐 |
전사 |
| ✅ 켜짐 |
삭제 |
| ❌ 꺼짐 |
일괄 |
| ❌ 꺼짐 |
설정 |
| ❌ 꺼짐 |
비활성화된 그룹은 어시스턴트에게 보이지 않습니다.
Related MCP server: popcorn
요구 사항
실행 중인 vdl 인스턴스.
MCP 토큰: vdl에서 MCP 탭 → 토큰 생성을 열고 복사하세요. 이 토큰은 범위가 지정되어 있습니다. 사용자가 활성화한 MCP 작업만 수행할 수 있습니다(쓰기/삭제 도구는 토글 및 읽기 전용 모드를 따르며, 그 외의 모든 것은 서버 측에서 거부됨). 따라서 일반 API 토큰보다 안전합니다.
설치
pipx 사용 (PATH에 vdl-mcp 추가):
pipx install git+https://github.com/sphings79/vdl-mcp또는 uv 사용:
uv tool install git+https://github.com/sphings79/vdl-mcpClaude Desktop에 연결
Claude Desktop 설정(claude_desktop_config.json)에 다음을 추가하세요:
{
"mcpServers": {
"vdl": {
"command": "vdl-mcp",
"env": {
"VDL_URL": "http://localhost:8000",
"VDL_TOKEN": "your-api-token"
}
}
}
}Claude Desktop을 다시 시작하면 vdl 도구가 나타납니다. (MCP를 지원하는 모든 클라이언트도 동일하게 작동합니다. stdio를 통해 vdl-mcp 명령을 실행하기만 하면 됩니다.)
Docker로 실행
컨테이너를 선호하시나요? 사전 빌드된 이미지가 GHCR에 게시되어 있습니다. 명령으로 사용하세요:
{
"mcpServers": {
"vdl": {
"command": "docker",
"args": ["run", "-i", "--rm",
"-e", "VDL_URL", "-e", "VDL_TOKEN",
"ghcr.io/sphings79/vdl-mcp:latest"],
"env": {
"VDL_URL": "http://host.docker.internal:8000",
"VDL_TOKEN": "your-api-token"
}
}
}
}-i(stdio를 위해 stdin 열기 유지)와 vdl이 동일한 호스트에서 실행될 때 컨테이너가 연결할 수 있도록 host.docker.internal에 유의하세요.
웹 UI 없음 — 의도적 설계
vdl-mcp는 MCP 클라이언트에 의해 로컬에서 실행되는 stdio 프로세스입니다. 네트워크 포트를 열지 않으므로 로그인 페이지나 fail2ban이 없습니다 — 인바운드 보호 대상이 없습니다. 보안 모델은 다음과 같습니다: API 토큰을 비공개로 유지하고, 파괴적 도구를 비활성화(기본값)하며, 선택적으로 도메인 허용 목록을 설정합니다. 인증 및 무차별 대입 공격 방지는 vdl 자체에 있습니다. (원격 다중 클라이언트 HTTP 서버를 원한다면 다른 전송 방식입니다 — 이슈를 열어주세요.)
도구
resolve(url)— 링크를 분석하고 항목 및 사용 가능한 품질을 나열합니다(다운로드 없음).download(url, audio=False, section="", wait=True)— 최고 품질(또는 MP3)을 다운로드합니다.section은0:30-1:00같은 클립을 자릅니다.wait는 완료된 파일name을 반환합니다.transcribe(name, language="")— Whisper 전사 → 텍스트를 반환합니다(vdl에 Whisper 모델이 설정되어 있어야 함).get_transcript(name)— 기존 전사 텍스트를 반환합니다.list_files(query, service, label, limit)— 다운로드를 탐색합니다.job_status(job_id)— 다운로드 작업을 확인합니다.(기본적으로 꺼짐)
delete_file,bulk,get_settings.
구성 (환경 변수)
변수 | 기본값 | 의미 |
|
| vdl 인스턴스의 기본 URL |
| (비어 있음) | vdl MCP 토큰 (MCP 탭에서) |
|
| 킬 스위치: 읽기 도구만 노출 (다운로드/전사/삭제/일괄 없음) |
|
| resolve/list/status/get_transcript |
|
| download |
|
| transcribe |
|
| 파일 삭제 |
|
| 일괄 작업 |
|
| 설정 읽기 |
| (설정 안 됨) | 도구별 재정의, 예: |
| (비어 있음 = 모두) | 어시스턴트가 다운로드할 수 있는 쉼표로 구분된 호스트 접미사 |
|
| 기본 요청 시간 초과 (초) |
모든 도구는 설명에 태그가 지정되어 있습니다 — [읽기], [쓰기] 또는 [삭제] — 사용자와 어시스턴트 모두 위험을 한눈에 볼 수 있습니다.
vdl의 웹 UI에서도 관리하세요: vdl에서 설정 → MCP 탭으로 이동하여 각 도구를 전환합니다(읽기 전용 마스터 스위치 및 위험 칩 포함). vdl-mcp는 시작 시 해당 구성을 가져오므로 환경 변수가 필요하지 않습니다. 변경 후 vdl-mcp를 다시 시작하세요. 도구 노출 여부의 우선 순위: 읽기 전용(환경 변수 또는 UI) → 도구별 환경 변수 재정의 → 웹 UI → 그룹 플래그.
보안 참고 사항
어시스턴트는 토큰을 통해 사용자로 작동합니다. 비공개로 유지하세요.
파괴적 도구는 기본적으로 꺼져 있습니다. 의식적으로 활성화하세요.
어시스턴트의 요청에 따라 임의의 URL을 다운로드하는 것은 프롬프트 인젝션 표면이 있습니다.
VDL_MCP_DOMAIN_ALLOWLIST(예:youtube.com,instagram.com)를 설정하여 제한하세요.소유하거나 다운로드할 권한/허가가 있는 콘텐츠에만 사용하세요. vdl과 동일한 면책 조항이 적용됩니다.
라이선스
GNU Affero General Public License v3.0 (AGPL-3.0) — LICENSE 참조. © 2026 sphings79
Available Tools
6 toolsdownloadA
[writes] Download a video or audio from a URL into vdl (best quality).
audio=True downloads MP3 (audio only).
section like '0:30-1:00' clips a part.
wait=True (default) waits for completion and returns the resulting file 'name' (use it with transcribe/get_transcript). wait=False returns immediately with a job_id.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| wait | No | ||
| audio | No | ||
| section | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool writes to 'vdl' (a local directory), that wait=True blocks and returns a file name, and wait=False returns a job_id. It does not mention potential overwrites, rate limits, or auth requirements, but the core behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: a single sentence defining purpose, followed by bullet points for details. Every sentence adds value, and the structure is easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters and an output schema, the description covers purpose, usage, and most parameters. It interacts well with sibling tools. The only oversight is the timeout_seconds parameter, but overall it is sufficiently complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It explains url (implicit), wait, audio, and section with examples. The only missing parameter is timeout_seconds, which is not addressed. This is a minor gap given the overall clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Download a video or audio from a URL into vdl (best quality).' It uses a specific verb and resource, and distinguishes itself from sibling tools like transcribe and get_transcript by mentioning their interaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use wait=True vs wait=False, and how to combine with transcribe/get_transcript. It also explains audio and section options. However, it does not explicitly state when not to use this tool or mention alternatives like job_status for tracking wait=False jobs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcriptA
[read] Return the transcript text (.txt) of a downloaded file, if it has been transcribed. If none exists yet, tells you to run transcribe(name) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly states the tool is a read operation ('[read]') and describes the conditional behavior (returns text or instructs to transcribe). However, it does not detail the return format or what happens if the file hasn't been downloaded, missing some transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using two short sentences to convey the purpose, condition, and fallback instruction. No words are wasted, and the structure front-loads the key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter, no annotations, but does have an output schema, the description is nearly complete. It covers the core behavior and prerequisite. It lacks some context about error states or file existence requirements, but for a simple tool, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the single required parameter 'name' by implying it must refer to a downloaded file that has been transcribed. Although schema coverage is 0%, the description compensates by providing context for the parameter's expected value. Without additional detail like format or examples, it cannot score a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns transcript text from a downloaded file, using a specific verb ('Return') and resource ('transcript text (.txt)'). It also distinguishes itself by mentioning the prerequisite condition, which differentiates it from sibling tools like 'download' and 'transcribe'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the user when to use the tool ('if it has been transcribed') and when not to use it ('If none exists yet, tells you to run transcribe(name) first'). This provides clear context and an alternative action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_statusA
[read] Status of a download job by id, or the list of all current jobs if no id is given.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the dual behavior (by id or all) and that it is read-only (via '[read]'). However, it does not explain what happens when job_id is invalid, whether results are paginated, or what state jobs can be in. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, with no wasted words: it states the operation type, resource, and conditional behavior concisely. Perfectly front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one optional parameter, no output schema, no annotations, and low sibling relatedness, the description covers the core mechanism. But for a listing tool, it could mention what fields each job status entry contains, whether results are sorted, or any rate limits. It is minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. The description explains the 'job_id' parameter's role: if provided, returns status for that job; if empty/omitted, returns all jobs. This adds significant meaning beyond the bare schema—specifically the default behavior. However, it doesn't specify format constraints or validation rules for the id string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with '[read]' which clearly signals a read operation, and then states the tool checks status by id or lists all jobs. This distinguishes it from siblings like 'download' or 'transcribe' which are clearly different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when needing job status or listing current jobs, but does not explicitly say when to use alternatives or when not to use it. No exclusions or sibling comparisons are provided, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesA
[read] List downloaded files in vdl. Optional filters: query (name/label substring), service (e.g. youtube), label. Returns name, size, duration, labels, in_feed.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| limit | No | ||
| query | No | ||
| service | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well. It explicitly marks the tool as a read operation with '[read]', lists return fields (name, size, duration, labels, in_feed), and mentions all filters. This fully informs the agent of the tool's behavior and output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the read indicator and core action. Every piece of information earns its place: operation type, resource, filters with examples, and return fields. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description does not need to detail return values further. It covers filters, operation type, and a general resource overview. I deduct 1 point because the 'limit' parameter is not explained, though its default is visible in the schema; with 0% schema coverage, a brief mention would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so by explaining that 'query' is a substring for name/label, 'service' is exemplified with 'youtube', and 'label' is a filter. 'limit' is not mentioned explicitly but has a default visible in schema, and its purpose is inferable. The description adds substantial meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List downloaded files in vdl' with a specific verb and resource. It also lists optional filters (query, service, label) and return fields, distinguishing it from sibling tools like get_transcript or download.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Optional filters' and lists them, giving clear context for when to use each filter. However, it does not explicitly mention when not to use this tool versus alternatives, though the read nature and filters are clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolveA
[read] Analyze a link and list the available media items and qualities — WITHOUT downloading.
Use this to preview what a URL contains before calling download.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description uses '[read]' to indicate a read-only operation, and explicitly states 'NOT downloading' and 'analyze a link... WITHOUT downloading.' This provides behavioral clarity about the tool being non-destructive. Since no annotations are provided, the description carries the full burden; it does so well but could add details like whether it requires authentication or has rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The first sentence defines purpose and behavior; the second provides usage guidance. Every word earns its place. No redundancy or unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 required param, no enums, output schema present), the description covers the core purpose, read-only behavior, and relationship to siblings. It lacks mention of what the output schema contains, but since an output schema exists, the agent can infer return structure. Could justify a 5 as complete for a simple tool, but 4 acknowledges minor gaps like authentication preconditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description says 'analyze a link' which implicitly tells the agent that the single parameter 'url' is a link to analyze. This adds semantic meaning beyond the bare schema, which only defines 'url' as a string. With schema description coverage at 0%, the description compensates well, though it could be more explicit about the expected URL format (e.g., HTTP/HTTPS, supported domains).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes a link and lists available media items and qualities without downloading. The verb 'analyze' and noun 'link' are specific, and the description differentiates it from 'download' by explicitly noting it does NOT download. However, it could be more precise about what 'media items' means (e.g., video/audio tracks, formats).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'preview what a URL contains before calling download.' It provides a clear exclusion: 'WITHOUT downloading.' The last sentence directly advises the agent to use this tool before the 'download' sibling, giving strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribeA
[writes] Transcribe a downloaded file locally with Whisper and return the text.
'name' is the downloads-relative path from list_files/download (e.g. 'youtube/clip.mp4'). Requires a Whisper model set in vdl (Settings → Transcription). Can take a while.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| language | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears full responsibility for disclosing behavior. It notes '[writes]' (suggesting mutation), requires a Whisper model, and mentions variable runtime. However, it fails to clarify side effects (e.g., file creation?), error handling, idempotency, or safety aspects. This leaves significant gaps in behavioral understanding for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loading the purpose first, then parameter clarification, then prerequisite and performance note. Every sentence contributes distinct value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the sibling tools (list_files, download, get_transcript), the description fits well into a transcription workflow. It explains the prerequisite (Whisper model), the path convention, and the time cost. Minor omission: it could explicitly state that the file must already be downloaded via the download tool, but the phrase 'downloaded file' and the path example imply this. The output schema exists, so return value documentation is not needed. Overall very helpful for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, requiring the description to explain all parameters. It adequately explains the 'name' parameter (downloads-relative path with example), but entirely omits the 'language' parameter (schematype: string, default: ''). With only one of two parameters described, the description adds only partial value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Transcribe a downloaded file locally with Whisper and return the text.' It specifies the verb (transcribe), resource (downloaded file), method (Whisper locally), and output (text). This distinguishes it from sibling tools like get_transcript (which likely retrieves existing transcripts) or list_files/download.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context: it requires a Whisper model set in settings and warns that it can take a while. This gives implicit usage guidance, but it does not explicitly state when to use this tool over alternatives (e.g., get_transcript) or list conditions where it should not be used. The guidance is adequate but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
download - First observed
get_transcript - First observed
job_status - First observed
list_files - First observed
resolve - First observed
transcribe
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: preview (resolve), download (download), monitor jobs (job_status), list files (list_files), transcribe (transcribe), and fetch transcript (get_transcript). No functional overlap.
All names use snake_case and are readable, but the pattern varies: verb_noun (list_files, get_transcript), verb (resolve, download, transcribe), and noun_noun (job_status). Mostly consistent but not a single pattern.
Six tools cover the full preview-download-monitor-list-transcribe workflow without being excessive. Each tool serves a necessary function in the pipeline.
Core lifecycle is fully covered: preview, download, job monitoring, file listing, transcription, and transcript retrieval. Minor gaps like deleting files or canceling jobs are missing, but the essential workflow is complete.
Maintenance
Related MCP Connectors
MCP server for Google Veo AI video generation
MCP server for Wan AI video generation
MCP server for Hailuo (MiniMax) AI video generation
MCP server for RiverScript, an AI transcription platform - fetches transcripts shared via a link.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceMCP server enabling AI agents to generate AI videos and images, analyze video content, and download videos from Douyin and Xiaohongshu.-
- AlicenseAqualityDmaintenanceAn MCP server that enables AI agents to analyze videos locally by extracting transcripts, detecting scene changes, and returning key frames.57MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that enables AI agents to watch and analyze videos from 1800+ sources, with persistent indexing, OCR, transcription, and a self-verification loop for debugging.MIT
- AlicenseNot gradedqualityCmaintenanceA self-hosted media downloader and converter MCP server that wraps yt-dlp and HandBrake, allowing AI assistants to download, convert, manage queues, and handle subscriptions.MIT