anime-download-mcp
一个集成 Anime Garden(动漫资源搜索)和 [QBittorrent API](下载)的 MCP 服务器,使用户可通过 MCP 连接自部署的 QBittorrent 服务端查找并下载动漫
安装
cd anime-download-mcp
uv sync配置
| 变量 | 说明 | 默认值 |
|---|---|---|
QB_URL | QBittorrent WebUI 地址 | http://localhost:8080 |
QB_USERNAME | QBittorrent 用户名 | admin |
QB_PASSWORD | QBittorrent 密码 | adminadmin |
PORT | MCP 服务器监听端口 | 8000 |
QB 参数也可以在调用工具时通过 qb_url、qb_username、qb_password 参数传入,优先级高于 .env。 下载工具还支持 qb_save_path,用于自定义本次任务的保存目录;不传入则使用 QB 默认下载目录。
启动
Docker 部署
使用 Docker Compose(推荐)
- 编辑docker compose文件:
services:
anime-download-mcp:
image: dahetao/anime-download-mcp:latest
container_name: anime-download-mcp
restart: unless-stopped
environment:
QB_URL: "http://host.docker.internal:8080"
# qBittorrent 地址,默认使用 host.docker.internal 访问宿主机
QB_USERNAME: "admin"
# qBittorrent 用户名
QB_PASSWORD: "adminadmin"
# qBittorrent 密码
PORT: "8000"
# MCP 服务端口
ports:
- "8000:8000"
extra_hosts:
# 兼容 Linux:允许容器通过 host.docker.internal 访问宿主机服务
- "host.docker.internal:host-gateway"- 启动 docker 容器
docker compose up -d- 查看日志:
docker compose logs -f anime-download-mcp- 停止服务:
docker compose down使用 docker run(可选)
docker run -d \
--name anime-download-mcp \
--restart unless-stopped \
-p 8000:8000 \
--add-host host.docker.internal:host-gateway \
-e QB_URL=http://host.docker.internal:8080 \
-e QB_USERNAME=admin \
-e QB_PASSWORD=adminadmin \
-e PORT=8000 \
dahetao/anime-download-mcp:latest本地开发部署
创建 .env 文件(或通过环境变量设置):
QB_URL=http://localhost:8080
QB_USERNAME=admin
QB_PASSWORD=adminadmin
PORT=8000git clone https://github.com/dahetaoa/anime-download-mcp.git
cd anime-download-mcp
uv sync
uv run python server.py服务默认监听 0.0.0.0:8000/mcp,支持局域网和公网访问。可通过 PORT 环境变量修改端口。
说明:默认使用内置的Anime GardenAPI 地址,如果需要更换,请修改server.py文件中的ANIME_GARDEN_API_URL变量。
接入 MCP 客户端
Claude Code:
claude mcp add --transport http anime-download http://:8000/mcpClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"anime-download": {
"command": "uv",
"args": ["run", "python", "server.py"],
"cwd": "/path/to/anime-download-mcp",
"env": {
"QB_URL": "http://localhost:8080",
"QB_USERNAME": "admin",
"QB_PASSWORD": "adminadmin"
}
}
}
}工具
接口升级说明(破坏性变更):已移除旧参数provider、provider_id,改为resource_ids(数组)。QB覆盖参数使用qb_url、qb_username、qb_password。
search_anime
搜索动漫资源,返回元数据,不返回磁力链接。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
query | string | 是 | 搜索关键词 |
page | int | 否 | 页码,默认 1 |
page_size | int | 否 | 每页数量,默认 20 |
返回字段:resource_id、title、size、date、fansub
其中 resource_id 格式固定为 / ,可直接传给 download_anime。
download_anime
通过 resource_ids 批量下载资源。服务器内部解析磁力链接并发送到 QBittorrent。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
resource_ids | string[] | 是 | 资源 ID 列表,每个元素格式 ` |
/ ,例如 ["dmhy/713024", "ani/123456"] | | qb_save_path | string | 否 | 本次调用的下载目录(覆盖 QB 默认保存路径) | | qb_url | string | 否 | QBittorrent 地址(覆盖 .env) | | qb_username | string | 否 | QBittorrent 用户名(覆盖 .env) | | qb_password` | string | 否 | QBittorrent 密码(覆盖 .env) |
返回字段:requested、started、failed、results 其中 results 为每个 resource_id 的处理结果,包含 resource_id、title、status、message。
list_qbittorrent_progress
查看 QBittorrent 当前下载进度。
| 参数 | 类型 | 必填 | 说明 | |
|---|---|---|---|---|
status_filter | string | 否 | 过滤状态:all、downloading、seeding、completed、paused、active、errored,默认 all | |
delete_hashes | string | 否 | 要删除的 torrent hash。支持单个 hash,或用 ` | ` 分隔多个 hash |
delete_files | bool | 否 | 删除 torrent 时是否同时删除已下载文件,默认 false | |
qb_url | string | 否 | QBittorrent 地址(覆盖 .env) | |
qb_username | string | 否 | QBittorrent 用户名(覆盖 .env) | |
qb_password | string | 否 | QBittorrent 密码(覆盖 .env) |
返回字段:hash、name、progress、state、dlspeed、eta
使用流程
搜索 search_anime("葬送的芙莉莲")
↓ 获得 resource_id(例如 dmhy/713024)
下载 download_anime(resource_ids=["dmhy/713024", "ani/123456"], qb_save_path="/data/anime")
↓ 内部解析磁力链接 → 发送到 QBittorrent
查看 list_qbittorrent_progress()
↓ 复制要删除任务的 hash
删除并刷新 list_qbittorrent_progress(status_filter="all", delete_hashes="", delete_files=false)测试
uv run python test_server.py