YouTube MCP
一个自动从 YouTube 视频中截取屏幕截图的工具。支持 YouTube Shorts 和 YouTube 视频。
功能
YouTube Shorts
- 每 n 秒截取一次屏幕截图
- 最多 60 张照片(如果视频长度为 60 秒或更长)
- 精确剪切视频区域并保存到
tmp/
- 实时查看屏幕截图
- 将所有或选定的图像以 ZIP 文件形式下载到本地(可在 Mac 和 Windows 上打开)
YouTube 视频
- 每 n 秒截取一次屏幕截图
- 最多 60 张照片(如果视频长度为 60 秒或更长)
- 精确剪切视频区域并保存到
tmp/
- 实时查看屏幕截图
- 将所有或选定的图像以 ZIP 文件形式下载到本地(可在 Mac 和 Windows 上打开)
TikTok
- 目前正在筹备中
- 请使用 YouTube 或 YouTube Shorts 网址
技术堆栈
- Node.js 18
- 表达
- 剧作家
- Firebase 函数(第二代)
- Firebase 托管
- Firebase 存储
- TypeScript
- 引导 CSS
项目配置
Playwrigh-MCP-Server/
├── functions/ # Cloud Functions
│ ├── src/ # ソースコード
│ │ ├── index.ts # メインエントリーポイント
│ │ ├── screenshot.ts # スクリーンショット機能
│ │ ├── screenshots.ts # スクリーンショット一覧取得
│ │ ├── download-zip.ts # ZIPダウンロード機能
│ │ └── types.ts # 型定義
│ ├── package.json # 依存関係
│ └── tsconfig.json # TypeScript設定
├── public/ # 静的ファイル
│ └── index.html # メインページ
├── firebase.json # Firebase設定
└── storage.rules # Storageセキュリティルール
API列表
截取屏幕截图
- 端点:
/screenshot
- 方法:POST
- 参数:
{
"url": "YouTube URL",
"interval": 1 // 間隔(秒)
}
- 回复:
{
"success": true,
"screenshots": [
{
"imageUrl": "署名付きURL",
"time": "タイムスタンプ",
"filename": "ファイル名"
}
],
"interval": 1
}
获取截图列表
- 端点:
/screenshots
- 方法:GET
- 回复:
[
{
"filename": "ファイル名",
"imageUrl": "署名付きURL",
"time": "タイムスタンプ"
}
]
ZIP 下载
- 端点:
/download-zip
- 方法:POST
- 参数:
{
"filenames": ["ファイル名1", "ファイル名2"]
}
- 响应:ZIP 文件
GCP 架构
使用的服务
- Firebase 函数(第二代)
- Firebase 存储
- 存储桶:mcp-5e4b5.firebasestorage.app
- 安全规则:仅限经过身份验证的用户访问
- Firebase 托管
IAM 权限设置
用户权限
t@bonginkan.ai
roles/owner
(项目所有者)roles/run.admin
(Cloud Run 管理员)
服务帐户权限
- 云函数
33501462786-compute@developer.gserviceaccount.com
roles/run.admin
roles/run.developer
roles/run.invoker
roles/cloudfunctions.developer
roles/storage.admin
- Firebase 管理员
firebase-adminsdk-fbsvc@mcp-5e4b5.iam.gserviceaccount.com
roles/firebase.sdkAdminServiceAgent
roles/firebaseauth.admin
roles/iam.serviceAccountTokenCreator
roles/storage.admin
- 云构建
33501462786@cloudbuild.gserviceaccount.com
roles/run.admin
roles/cloudfunctions.developer
roles/storage.admin
roles/artifactregistry.admin
roles/eventarc.admin
实现细节
截图功能
- 使用 Playwright 控制无头浏览器
- 视口尺寸:1280x720
- 使用临时目录存储屏幕截图
- 上传到 Firebase 存储后,删除临时文件。
- 签名 URL 有效期为 15 分钟
错误处理
- 捕获每个 API 端点的错误
- 以 JSON 格式返回错误消息。
- 处理 404 端点
- 500 错误的适当错误响应
CORS 设置
- 允许的来源:
- 允许的方法:GET、POST
- 凭证:有效
安全功能
- Firebase 存储安全规则
- 设置签名 URL 的过期时间(15 分钟)
- 正确删除临时文件
最新修订(2024-03-28)
错误修复
- 改进的 CORS 配置
- 改进的错误处理
- 404 错误的 JSON 响应
- 500 错误的详细错误消息
- Firebase 存储支持
- 明确指定存储桶名称
- 将签名 URL 的过期时间设置为 15 分钟
- Cloud Functions Gen 2 优化
- 优化内存设置(1GiB)
- 调整超时设置(540秒)
- 设置并发执行数(80)
改进的功能
- 截图功能
- 优化 Playwright 设置
- 无头浏览器视口设置
- 改进的临时文件管理
- 改进了对 YouTube Shorts 的支持
- 实时显示功能实现
- 改进的 API 响应
- 日语错误信息
- 标准化响应格式
- 时间戳格式的标准化
- 实现流式响应
- 增强安全性
- Firebase 存储安全规则更新
- 确保临时文件被删除
- 适当限制错误信息
- 前端改进
- 优化实时显示
- 图片URL修正
- 改进的错误处理
- 用户界面改进
设置
- 克隆存储库
git clone https://github.com/tsubouchi/youtube_mcp.git
cd youtube_mcp
- 安装依赖项
# プロジェクトルート
npm install
# Cloud Functions
cd functions
npm install
- 安装 Firebase CLI
npm install -g firebase-tools
- 登录 Firebase
- 初始化项目
- 部署
# Cloud Functions
cd functions
npm run deploy
# Firebase Hosting
cd ..
firebase deploy --only hosting
设置本地开发环境
- 安装依赖项
# プロジェクトルート
npm install
# Cloud Functions
cd functions
npm install
- 设置服务帐户密钥
- 从 Firebase 控制台下载您的服务帐号密钥
- 保存为
functions/service-account.json
- 设置环境变量
# functions/.env
GOOGLE_APPLICATION_CREDENTIALS=./service-account.json
- 启动模拟器
cd functions
npm run serve
仿真器端口设置
模拟器使用以下端口:
API 测试
- 健康检查
curl http://localhost:5001/mcp-5e4b5/us-central1/api
- 截取屏幕截图
curl -X POST http://localhost:5001/mcp-5e4b5/us-central1/api/screenshot \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"url": "YouTube URL", "interval": 5}'
- 获取截图列表
curl http://localhost:5001/mcp-5e4b5/us-central1/api/screenshots
- ZIP 下载
curl -X POST http://localhost:5001/mcp-5e4b5/us-central1/api/download-zip \
-H "Content-Type: application/json" \
-d '{"filenames": ["ファイル名1", "ファイル名2"]}'
笔记
- 使用模拟器时,您将访问实际的 Firebase 存储。
- 服务帐户密钥包含在
.gitignore
中,并且未提交到存储库 - 您可以在模拟器 UI 中检查函数的执行状态和日志。
笔记
- Node.js 18 将于 2025 年 4 月 30 日弃用
- 屏幕截图保存到临时目录并在处理后删除。
- 如果视频长度超过 60 秒,则只会保存前 60 张图像。
- Firebase Storage 的安全规则设置为仅允许经过身份验证的用户访问。
- 签名 URL 的有效期仅为 15 分钟
重要的
保存屏幕截图和压缩文件的规范
- 保存屏幕截图
- 所有屏幕截图都临时保存在
/tmp/screenshots/
目录中。 - 文件名的格式为
screenshot_[タイムスタンプ]_[連番].png
- 处理完成后,临时文件将被保留,并在您截取新屏幕截图时被覆盖。
- 创建 ZIP 文件
- 选定的屏幕截图将直接从
/tmp/screenshots/
加载 - 下载后,将在
/tmp/screenshots/
中创建一个临时 ZIP 文件,然后删除该文件。 - ZIP 文件名的格式为
screenshots_[タイムスタンプ].zip
- 管理临时文件
- 应定期清理临时文件
- 我们建议在拍摄新截图之前删除旧截图。
执照
MIT 许可证