动漫下载MCP服务

一个集成动漫资源搜索和下载功能的MCP服务器,支持通过QBittorrent进行动漫下载管理。

  • by dahetaoa
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 dahetaoa/anime-download-mcp

使用说明

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(推荐)

  1. 编辑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"
  1. 启动 docker 容器
docker compose up -d
  1. 查看日志:
docker compose logs -f anime-download-mcp
  1. 停止服务:
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=8000
git 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 Garden API 地址,如果需要更换,请修改server.py文件中的ANIME_GARDEN_API_URL变量。

接入 MCP 客户端

Claude Code:

claude mcp add --transport http anime-download http://<服务器IP>:8000/mcp

Claude 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 格式固定为 <provider>/<provider_id>,可直接传给 download_anime。

download_anime

通过 resource_ids 批量下载资源。服务器内部解析磁力链接并发送到 QBittorrent。

参数 类型 必填 说明
resource_ids string[] 是 资源 ID 列表,每个元素格式 <provider>/<provider_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,或用 `
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="<hash>", delete_files=false)

测试

uv run python test_server.py