YouTube MCP

by tsubouchi
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Extracts screenshots from YouTube videos at specified intervals or timestamps, with special handling for regular videos and Shorts format.

  • Takes screenshots at 1-10 second intervals from YouTube Shorts, capturing up to 60 screenshots per video with precise cropping of the video area.

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 架构

使用的服务

  1. Firebase 函数(第二代)
  2. Firebase 存储
    • 存储桶:mcp-5e4b5.firebasestorage.app
    • 安全规则:仅限经过身份验证的用户访问
  3. Firebase 托管

IAM 权限设置

用户权限

  • t@bonginkan.ai
    • roles/owner (项目所有者)
    • roles/run.admin (Cloud Run 管理员)

服务帐户权限

  1. 云函数
    • 33501462786-compute@developer.gserviceaccount.com
      • roles/run.admin
      • roles/run.developer
      • roles/run.invoker
      • roles/cloudfunctions.developer
      • roles/storage.admin
  2. Firebase 管理员
    • firebase-adminsdk-fbsvc@mcp-5e4b5.iam.gserviceaccount.com
      • roles/firebase.sdkAdminServiceAgent
      • roles/firebaseauth.admin
      • roles/iam.serviceAccountTokenCreator
      • roles/storage.admin
  3. 云构建
    • 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 设置

安全功能

  • Firebase 存储安全规则
  • 设置签名 URL 的过期时间(15 分钟)
  • 正确删除临时文件

最新修订(2024-03-28)

错误修复

  1. 改进的 CORS 配置
    • 明确指定允许的来源
    • 启用凭证
  2. 改进的错误处理
    • 404 错误的 JSON 响应
    • 500 错误的详细错误消息
  3. Firebase 存储支持
    • 明确指定存储桶名称
    • 将签名 URL 的过期时间设置为 15 分钟
  4. Cloud Functions Gen 2 优化
    • 优化内存设置(1GiB)
    • 调整超时设置(540秒)
    • 设置并发执行数(80)

改进的功能

  1. 截图功能
    • 优化 Playwright 设置
    • 无头浏览器视口设置
    • 改进的临时文件管理
    • 改进了对 YouTube Shorts 的支持
    • 实时显示功能实现
  2. 改进的 API 响应
    • 日语错误信息
    • 标准化响应格式
    • 时间戳格式的标准化
    • 实现流式响应
  3. 增强安全性
    • Firebase 存储安全规则更新
    • 确保临时文件被删除
    • 适当限制错误信息
  4. 前端改进
    • 优化实时显示
    • 图片URL修正
    • 改进的错误处理
    • 用户界面改进

设置

  1. 克隆存储库
git clone https://github.com/tsubouchi/youtube_mcp.git cd youtube_mcp
  1. 安装依赖项
# プロジェクトルート npm install # Cloud Functions cd functions npm install
  1. 安装 Firebase CLI
npm install -g firebase-tools
  1. 登录 Firebase
firebase login
  1. 初始化项目
firebase init
  1. 部署
# Cloud Functions cd functions npm run deploy # Firebase Hosting cd .. firebase deploy --only hosting

设置本地开发环境

  1. 安装依赖项
# プロジェクトルート npm install # Cloud Functions cd functions npm install
  1. 设置服务帐户密钥
  • 从 Firebase 控制台下载您的服务帐号密钥
  • 保存为functions/service-account.json
  1. 设置环境变量
# functions/.env GOOGLE_APPLICATION_CREDENTIALS=./service-account.json
  1. 启动模拟器
cd functions npm run serve

仿真器端口设置

模拟器使用以下端口:

API 测试

  1. 健康检查
curl http://localhost:5001/mcp-5e4b5/us-central1/api
  1. 截取屏幕截图
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}'
  1. 获取截图列表
curl http://localhost:5001/mcp-5e4b5/us-central1/api/screenshots
  1. 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 分钟

重要的

保存屏幕截图和压缩文件的规范

  1. 保存屏幕截图
    • 所有屏幕截图都临时保存在/tmp/screenshots/目录中。
    • 文件名的格式为screenshot_[タイムスタンプ]_[連番].png
    • 处理完成后,临时文件将被保留,并在您截取新屏幕截图时被覆盖。
  2. 创建 ZIP 文件
    • 选定的屏幕截图将直接从/tmp/screenshots/加载
    • 下载后,将在/tmp/screenshots/中创建一个临时 ZIP 文件,然后删除该文件。
    • ZIP 文件名的格式为screenshots_[タイムスタンプ].zip
  3. 管理临时文件
    • 应定期清理临时文件
    • 我们建议在拍摄新截图之前删除旧截图。

执照

MIT 许可证

ID: u2f5xij3z5