一个用于YouTube操作的模型上下文协议(MCP)服务器,展示了核心MCP概念,包括工具和日志记录。
✨ 不需要API密钥! 使用yt-info-extract提取视频元数据和使用yt-ts-extract提取字幕,开箱即用。
此包现在在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,请先安装
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密钥
克隆仓库:
git clone https://github.com/sinjab/mcp_youtube_extract.git
cd mcp_youtube_extract
开发模式安装:
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 Data API密钥以增强功能。以下是获取方法:
# 从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
该脚本将:
get_yt_video_info工具与示例视频服务器提供了一个主要工具:get_yt_video_info
此工具接受一个YouTube视频ID,并返回:
示例用法:
# 从YouTube URL中提取视频ID:https://www.youtube.com/watch?v=dQw4w9WgXcQ
video_id = "dQw4w9WgXcQ"
result = get_yt_video_info(video_id)
要使用此MCP服务器与客户端一起使用,请将以下配置添加到客户端的设置中:
{
"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
项目采用全面的测试方法:
test_youtube_unit.py):使用模拟yt-info-extract测试核心YouTube功能test_context_fix.py,test_with_api_key.py):测试完整的服务器功能test_inspector.py):交互式服务器检查工具项目包括强大的错误处理:
# 安装构建依赖项
uv add --dev hatch
# 构建包
uv run hatch build
此项目根据MIT许可证授权 - 详情见LICENSE文件。
欢迎贡献!请随时提交Pull Request。
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)如果你遇到任何问题或有任何疑问,请: