内容
# MCP Invidious
模型上下文协议(MCP)服务器,通过 [Invidious](https://github.com/iv-org/invidious) 实例提供 YouTube 搜索功能。
## 功能
- **搜索视频、频道和播放列表**,可按日期、时长和排序方式筛选
- **视频详情**,包括标题、描述、浏览量、点赞数、时长和关键词
- **频道详情**,包括订阅者数量、描述和元数据
- **视频评论**,包括回复数量和排序选项
- **热门视频**,按类别和地区分类
- **双重传输**:用于 CLI 代理的标准输入输出, 用于远程连接的 HTTP
## 可用工具
| 工具 | 描述 |
|------|-------------|
| `search_videos` | 搜索 YouTube 视频,可选筛选条件(排序方式、日期、时长) |
| `search_channels` | 搜索 YouTube 频道 |
| `search_playlists` | 搜索 YouTube 播放列表 |
| `video_details` | 获取特定视频的详细信息 |
| `channel_details` | 获取特定频道的详细信息 |
| `video_comments` | 获取视频的评论 |
| `trending` | 获取特定类型和地区的热门视频 |
## 快速入门
### 前提条件
- Rust 1.93+
- 一个 Invidious 实例 URL
### 构建和运行
```bash
cargo build --release
# 使用标准输入输出传输(默认)
INVIDIOUS_URL=https://vid.puffyan.us cargo run --release
# 使用 HTTP 传输
INVIDIOUS_URL=https://vid.puffyan.us MCP_TRANSPORT=http cargo run --release
```
### 配置
| 变量 | 默认值 | 是否必需 | 描述 |
|----------|---------|----------|-------------|
| `INVIDIOUS_URL` | — | 是 | Invidious 实例基础 URL |
| `MCP_TRANSPORT` | `stdio` | 否 | 传输模式:`stdio` 或 `http` |
| `MCP_HOST` | `0.0.0.0` | 否 | HTTP 绑定地址 |
| `MCP_PORT` | `3005` | 否 | HTTP 绑定端口 |
| `INVIDIOUS_LANG` | `es` | 否 | 默认搜索语言(ISO 639-1) |
| `INVIDIOUS_INSECURE` | `false` | 否 | 禁用 TLS 证书验证(`true`/`1`) |
| `INVIDIOUS_ENABLED_TOOLS` | *(所有)* | 否 | 已启用工具的逗号分隔列表,或 `all` |
## Docker
构建镜像:
```bash
podman build -t mcp-invidious:latest .
```
使用 Podman 运行:
```bash
podman run -e INVIDIOUS_URL=https://vid.puffyan.us -p 3005:3005 mcp-invidious:latest
```
或使用提供的 systemd 容器单元:
```bash
# 编辑 mcp-invidious.container 并设置您的 INVIDIOUS_URL,然后:
systemctl --user enable --now mcp-invidious.container
```
## 架构
```
src/
├── main.rs # 入口:环境变量 → 配置 → 传输(标准输入输出/HTTP)→ 启动
├── config.rs # 从环境变量创建 AppConfig,含默认值
├── handler.rs # ServerHandler 实现(通过 tool_box! 调度工具)
├── error.rs # 基于 thiserror 的错误类型
├── invidious.rs # reqwest 客户端 + Invidious API 响应类型
└── tools.rs # 通过 #[mcp_tool] 宏实现工具 + 格式化助手
```
## 开发
```bash
cargo build
cargo run
cargo test
cargo clippy -- -D warnings
cargo fmt
```
## 许可证
MIT