基于 Supabase Edge Functions 的 MCP 服务器,提供视频下载、音频提取等功能。
# 启动服务器
deno task dev
# 服务器会在 http://localhost:8000 启动
# 部署
deno task deploy:check
# 配置环境变量
supabase secrets set WORKER_DLP_API_KEY=your-api-key
supabase secrets set PROXY_URL=http://proxy:8080 # 可选
{
"servers": {
"worker-dlp": {
"command": "npx",
"args": ["mcp-remote", "http://localhost:8000"],
"type": "stdio",
"env": {
"WORKER_DLP_API_KEY": "<api key>",
"PROXY_URL": "http://127.0.0.1:10808"
}
}
}
}
{
"servers": {
"worker-dlp": {
"url": "http://localhost:8000",
"type": "http",
"headers": {
"Authorization": "Bearer <api key>"
}
}
}
}
download_video - 下载单个视频到云端存储download_playlist - 下载播放列表/合集到云端存储get_task_status - 查询任务状态(单个/批量查询)stop_task - 停止正在运行的任务retry_task - 重试失败的任务get_video_info - 获取视频元信息(开发中)download_audio - 提取音频文件(开发中)get_formats - 查询可用格式(开发中)curl -X POST http://localhost:8000 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <api key>" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "download_video",
"arguments": {
"url": "https://youtube.com/watch?v=example",
"quality": "720p",
"sync": false
}
},
"id": 1
}'
响应示例:
{
"jsonrpc": "2.0",
"result": {
"code": 0,
"msg": "任务已创建",
"data": {
"taskId": "task_abc123",
"status": "pending",
"downloadUrl": "http://localhost:8000/storage/task_abc123"
}
},
"id": 1
}
curl -X POST http://localhost:8000 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <api key>" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "get_task_status",
"arguments": {
"taskId": "task_abc123"
}
},
"id": 2
}'
curl -X POST http://localhost:8000 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <api key>" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "download_playlist",
"arguments": {
"url": "https://youtube.com/playlist?list=example",
"max_downloads": 5
}
},
"id": 3
}'
# 下载任务产物文件
GET /storage/{taskId}
# 响应:
# - 成功时:文件流下载
# - 失败时:JSON错误信息
# 查询任务详情
GET /task/{taskId}
# 响应示例:
{
"code": 0,
"msg": "查询成功",
"data": {
"task": {
"id": "task_abc123",
"type": "download_video",
"status": "success",
"result": { ... },
"createdAt": "2025-01-01T00:00:00Z"
}
}
}
curl -X POST http://localhost:8000 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <api key>" \
-d '{
"url": "https://youtube.com/watch?v=example",
"action": "download",
"quality": "720p"
}'
worker-dlp/ ├── index.ts # 主入口文件和HTTP路由 ├── config.ts # 配置管理 ├── deps.ts # 依赖管理 ├── lib/ # 核心库 │ ├── executor.ts # yt-dlp 执行器 │ ├── storage.ts # 任务状态和文件存储 │ ├── mcp-server.ts # MCP 协议服务器 │ ├── download-task.ts # 任务管理和执行 │ ├── process-manager.ts # 进程生命周期管理 │ ├── tool-registry.ts # 工具注册和发现 │ └── utils.ts # 通用工具函数 ├── tools/ # MCP 工具实现 │ ├── download-video.ts # 单视频下载 │ ├── download-playlist.ts # 播放列表下载 │ ├── get-task-status.ts # 任务状态查询 │ ├── retry-task.ts # 任务重试 │ └── stop-task.ts # 任务停止 ├── types/ # 类型定义 │ ├── mcp.ts # MCP协议和任务类型 │ └── api.ts # API响应类型 ├── docs/ # 项目文档 │ ├── requirements.md # 需求分析 │ ├── design.md # 系统设计 │ ├── tasks.md # 开发任务 │ └── recovery-mechanism.md # 异常恢复机制 └── tmp/ # 临时文件和任务状态 ├── tasks.json # 任务持久化存储 └── files/ # 下载文件临时目录
deno task dev # 启动开发服务器 (http://localhost:8000)
deno task start # 启动生产服务器
deno task supabase:dev # Supabase 本地开发环境
deno task supabase:deploy # 部署到 Supabase Edge Functions
deno task supabase:logs # 查看部署日志
deno task check # TypeScript 类型检查
deno task fmt # 代码格式化
deno task lint # 代码规范检查