返回市场
麦克风_YouTube提取器

麦克风_YouTube提取器

作者:sinjab16 星标更新:2025-09-03

项目介绍

MCP YouTube Extract

PyPI 版本 Python 3.13+ MIT 许可证 代码风格:black

一个用于YouTube操作的模型上下文协议(MCP)服务器,展示了核心MCP概念,包括工具和日志记录。

✨ 不需要API密钥! 使用yt-info-extract提取视频元数据和使用yt-ts-extract提取字幕,开箱即用。

功能

  • MCP服务器:一个完全功能的MCP服务器,包含:
    • 工具:从YouTube视频中提取信息,包括元数据和字幕
    • 全面的日志记录:应用程序中的详细日志记录
    • 错误处理:强大的错误处理机制,带有字幕的回退逻辑
  • YouTube集成:内置的YouTube功能,使用yt-info-extract和yt-ts-extract:
    • 提取视频信息(标题、描述、频道、发布日期、观看次数)
    • 获取视频字幕,带有智能回退逻辑
    • 支持手动创建和自动生成的字幕
    • 基础功能不需要API密钥

📦 在PyPI上可用

此包现在在PyPI上可用!你可以直接安装:

pip install mcp-youtube-extract

访问包页面:mcp-youtube-extract on PyPI

安装

快速开始(推荐)

最简单的方法是从PyPI安装:

pip install mcp-youtube-extract

或者使用pipx(推荐用于命令行工具):

pipx install mcp-youtube-extract

这将安装最新版本及其所有依赖项。然后你可以直接运行MCP服务器:

mcp_youtube_extract

使用uv(开发)

对于开发或如果你更喜欢使用uv:

# 如果还没有安装uv,请先安装
curl -LsSf https://astral.sh/uv/install.sh | sh

# 克隆并安装项目
git clone https://github.com/sinjab/mcp_youtube_extract.git
cd mcp_youtube_extract

# 安装依赖项(包括开发依赖项)
uv sync --dev

# 设置你的API密钥以供开发使用
cp .env.example .env
# 编辑.env文件并添加你的YouTube API密钥

从源码安装

  1. 克隆仓库:

    git clone https://github.com/sinjab/mcp_youtube_extract.git
    cd mcp_youtube_extract
    
  2. 开发模式安装:

    uv sync --dev
    

配置

环境变量

无需配置! 服务器开箱即用,使用yt-info-extract进行元数据提取。

可选: 为了增强功能,你可以选择设置一个YouTube API密钥:

# 可选YouTube API配置
YOUTUBE_API_KEY=your_youtube_api_key_here

可选:

  • YOUTUBE_API_KEY:你的YouTube Data API密钥(可选,提供额外的元数据提取回退)

获取YouTube API密钥(可选)

虽然不是必需的,但你可以选择设置一个YouTube Data API密钥以增强功能。以下是获取方法:

第一步:创建一个Google Cloud项目

  1. 转到Google Cloud控制台
  2. 点击页面顶部的“选择项目”
  3. 点击“新建项目”并为其命名(例如,“MCP YouTube Extract”)
  4. 点击“创建”

第二步:启用YouTube Data API

  1. 在新项目中,转到API库
  2. 搜索“YouTube Data API v3”
  3. 点击它,然后点击“启用”

第三步:创建API凭据

  1. 转到凭据页面
  2. 点击“创建凭据”,选择“API密钥”
  3. 新的API密钥将被显示出来——立即复制它
  4. 点击“限制密钥”以保护它(推荐)

第四步:限制API密钥(推荐)

  1. 在API密钥设置中,点击“限制密钥”
  2. 在“API限制”下,选择“限制密钥”
  3. 从下拉菜单中选择“YouTube Data API v3”
  4. 点击“保存”

第五步:设置计费(必需)

  1. 转到计费页面
  2. 将计费账户链接到你的项目
  3. 注意:YouTube Data API有一个免费层级,每天10,000个单位,通常足以满足大多数使用情况

API密钥使用限制

  • 免费层级:每天10,000个单位
  • 费用:超过免费层级后每1,000个单位5美元
  • 注意:API密钥仅在yt-info-extract失败时作为回退使用
  • 大多数用户不需要API密钥,因为yt-info-extract可以处理大多数请求

安全最佳实践

  • 永远不要将API密钥提交到版本控制系统
  • 使用环境变量如配置部分所示
  • 限制你的API密钥仅限于YouTube Data API
  • 监控使用情况在Google Cloud控制台中

使用

运行MCP服务器

使用PyPI安装(推荐)

# 从PyPI安装
pip install mcp-youtube-extract

# 运行服务器
mcp_youtube_extract

使用开发设置

# 使用uv
uv run mcp_youtube_extract

# 或者直接运行
python -m mcp_youtube_extract.server

运行测试

# 运行所有pytest测试
uv run pytest

# 运行特定的pytest测试
uv run pytest tests/test_with_api_key.py

# 运行带有覆盖率的测试
uv run pytest --cov=src/mcp_youtube_extract --cov-report=term-missing

注意tests/目录包含4个文件:

  • test_context_fix.py - Pytest测试,用于上下文API回退功能
  • test_with_api_key.py - Pytest测试,用于带有API密钥的全部功能
  • test_youtube_unit.py - 单元测试,用于核心YouTube功能
  • test_inspector.py - 独立检查脚本(不是pytest测试)

测试覆盖率:该项目目前总体覆盖率为62%,核心功能有很好的覆盖率:

  • youtube.py:81%覆盖率(核心业务逻辑)
  • logger.py:73%覆盖率(日志实用程序)
  • server.py:22%覆盖率(MCP协议处理)
  • __init__.py:100%覆盖率(包初始化)

运行检查脚本

test_inspector.py文件是一个独立脚本,连接到MCP服务器并验证其功能:

# 运行检查脚本来测试服务器连接性和功能
uv run python tests/test_inspector.py

该脚本将:

  • 连接到MCP服务器
  • 列出可用的工具、资源和提示
  • 测试get_yt_video_info工具与示例视频
  • 验证服务器是否正常工作

使用YouTube工具

服务器提供了一个主要工具:get_yt_video_info

此工具接受一个YouTube视频ID,并返回:

  • 视频元数据(标题、描述、频道、发布日期、观看次数),通过yt-info-extract
  • 视频字幕(带有不同字幕类型的回退逻辑),通过yt-ts-extract

示例用法:

# 从YouTube URL中提取视频ID:https://www.youtube.com/watch?v=dQw4w9WgXcQ
video_id = "dQw4w9WgXcQ"
result = get_yt_video_info(video_id)

客户端配置

要使用此MCP服务器与客户端一起使用,请将以下配置添加到客户端的设置中:

使用PyPI安装(推荐)

{
  "mcpServers": {
    "mcp_youtube_extract": {
      "command": "mcp_youtube_extract"
    }
  }
}

带可选API密钥:

{
  "mcpServers": {
    "mcp_youtube_extract": {
      "command": "mcp_youtube_extract",
      "env": {
        "YOUTUBE_API_KEY": "your_youtube_api_key"
      }
    }
  }
}

使用开发设置

{
  "mcpServers": {
    "mcp_youtube_extract": {
      "command": "uv",
      "args": [
        "--directory",
        "<your-project-directory>",
        "run",
        "mcp_youtube_extract"
      ]
    }
  }
}

带可选API密钥:

{
  “mcpServers”: {
    “mcp_youtube_extract”: {
      “command”: “uv”,
      “args”: [
        “--directory”,
        “<your-project-directory>”,
        “run”,
        “mcp_youtube_extract”
      ],
      “env”: {
        “YOUTUBE_API_KEY”: “your_youtube_api_key”
      }
    }
  }
}

开发

项目结构

mcp_youtube_extract/
├── src/
│   └── mcp_youtube_extract/
│       ├── __init__.py
│       ├── server.py          # MCP服务器实现
│       ├── google_api.py      # yt-info-extract集成
│       ├── transcript_api.py  # yt-ts-extract集成
│       ├── youtube.py         # 统一API外观
│       └── logger.py          # 日志配置
├── tests/
│   ├── __init__.py
│   ├── test_context_fix.py    # 上下文API回退测试
│   ├── test_inspector.py      # 服务器检查测试
│   ├── test_with_api_key.py   # 全部功能测试
│   └── test_youtube_unit.py   # 核心功能的单元测试
├── logs/                      # 应用程序日志
├── .env                       # 环境变量(从.env.example创建)
├── .gitignore                 # Git忽略规则(包括覆盖率文件)
├── pyproject.toml
├── LICENSE                    # MIT许可证
└── README.md

测试策略

项目采用全面的测试方法:

  1. 单元测试test_youtube_unit.py):使用模拟yt-info-extract测试核心YouTube功能
  2. 集成测试test_context_fix.pytest_with_api_key.py):测试完整的服务器功能
  3. 手动验证test_inspector.py):交互式服务器检查工具

错误处理

项目包括强大的错误处理:

  • 优雅的提取失败:返回适当的错误消息而不是崩溃
  • 多种回退策略:yt-info-extract提供了自动回退到YouTube Data API、yt-dlp和pytubefix之间
  • 字幕回退逻辑:通过yt-ts-extract检索字幕的多种策略
  • 一致的错误响应:标准化的错误消息格式
  • 全面的日志记录:详细的日志记录用于调试和监控

构建

# 安装构建依赖项
uv add --dev hatch

# 构建包
uv run hatch build

许可证

此项目根据MIT许可证授权 - 详情见LICENSE文件。

贡献

欢迎贡献!请随时提交Pull Request。

开始

  1. 分叉仓库
  2. 创建一个功能分支(git checkout -b feature/amazing-feature
  3. 提交更改(git commit -m 'Add some amazing feature'
  4. 推送到分支(git push origin feature/amazing-feature
  5. 打开一个Pull Request

支持

如果你遇到任何问题或有任何疑问,请:

  1. 查看现有问题
  2. 创建一个新的问题,附上详细的问题信息
  3. 如适用,请包括日志和错误消息