MoviePilot-MCP
MoviePilot MCP Server is a Model Context Protocol server implementation designed to enable natural language interaction with the MoviePilot media library management system. It allows users to search, query, manage, and control various media-related tasks directly through supported chat applications or interfaces.
MoviePilot MCP 服务器
这是一个 模型上下文协议 (MCP - Model Context Protocol) 服务器实现,用于连接大型语言模型 (LLM) 与 MoviePilot 媒体库自动化管理服务器。
目标
本项目旨在让用户能够通过自然语言与他们的 MoviePilot 实例进行交互,从而实现以下功能:
- 搜索和发现 电影、电视剧及相关信息。
- 查询 媒体详情、季集信息、演员阵容和推荐。
- 查找 可用的下载资源 (种子)。
- 管理 媒体订阅(添加、查看、更新、删除、启用/禁用)。
- 控制 下载任务(添加、查看状态、暂停、恢复、删除)。
- 获取 媒体库状态(最近添加、正在播放、检查存在性)。
通过将 MoviePilot 的功能暴露给 LLM,用户可以在支持 MCP 的聊天应用(如 Cherry Studio 或集成了 MCP 的客户端)中,用对话的方式轻松管理媒体库。
使用方式
1. 使用 Docker 运行 streamable http 服务端
本项目支持使用 Docker 进行部署。您可以从 Docker Hub 拉取预构建的镜像。
Docker Hub 镜像: pollo3470/moviepilot-mcp
a. 使用 docker run
-
拉取镜像:
docker pull pollo3470/moviepilot-mcp:latest
-
准备
.env
文件: 在您希望运行 Docker 的目录下创建一个.env
文件,填入必要的配置信息。# .env MOVIEPILOT_BASE_URL=http://your-moviepilot-ip:3000 # 你的 MoviePilot 地址 MOVIEPILOT_USERNAME=your_moviepilot_username # 你的 MoviePilot 用户名 (用于密码认证) MOVIEPILOT_PASSWORD=your_moviepilot_password # 你的 MoviePilot 密码 (用于密码认证) MCP_API_KEY=your_strong_api_key # 请设置一个强随机的API密钥,用于保护MCP服务器的访问。未设置时会自动生成一个随机密钥并打印到日志。 # 可选配置 # LOG_LEVEL=INFO
-
运行容器:
docker run -d \ --name moviepilot-mcp \ -p 8000:8000 \ --env-file ./.env \ --restart unless-stopped \ pollo3470/moviepilot-mcp:latest
参数说明:
-d
: 后台运行容器。--name moviepilot-mcp
: 给容器命名。-p 8000:8000
: 将主机的 8000 端口映射到容器的 8000 端口。--env-file ./.env
: 从当前目录下的.env
文件加载环境变量。您也可以使用多个-e
参数单独指定环境变量,例如-e MOVIEPILOT_BASE_URL="http://localhost:3000" -e MCP_API_KEY="your_secret_key"
。--restart unless-stopped
: 容器退出时自动重启,除非手动停止。
b. 使用 docker-compose
参考本项目根目录下 docker-compose.yml
文件,创建一个docker-compose.yml文件。
-
准备
.env
文件: 与docker-compose.yml
同级,创建一个.env
文件,并填入必要的配置信息,如上文docker run
部分所述。* 确保MCP_API_KEY
已设置。* -
运行: 在docker-compose.yml文件所在目录下执行:
docker-compose up -d
此命令会拉取最新镜像(如果本地没有或有更新)并启动服务。
要停止服务,请运行:
docker-compose down
启动后,streamable http 的 MCP 服务将在 http://localhost:8000/mcp
(或您配置的主机和端口) 上可用。请确保在客户端请求时,在
HTTP Header 中包含 X-API-Key
并填入您在 .env
文件中设置的 MCP_API_KEY
。
2. Stdio模式
在支持 MCP 的应用(如Cline)中添加以下配置。
{
"mcpServers": {
"moviepilot": {
"command": "uvx",
"args": [
"moviepilot-mcp"
],
"env": {
"MOVIEPILOT_BASE_URL": "MoviePilot 服务器的URL",
"MOVIEPILOT_USERNAME": "你的 MoviePilot 用户名",
"MOVIEPILOT_PASSWORD": "你的 MoviePilot 密码"
}
}
}
}
核心功能
基于 MoviePilot 的 API,本 MCP 服务器计划(或已)暴露以下核心功能作为 MCP Tools:
1. 搜索与发现
- 搜索媒体: 根据标题/关键词查找电影、电视剧或人物。
- MCP Tool:
search_media_or_person
- 示例: "搜索电影《星际穿越》", "找找演员 '基努·里维斯'"
- MCP Tool:
- 探索: 探索来自豆瓣、TMDB的电影、电视剧。
- MCP Tool:
discover_douban_media
,discover_tmdb_media
- 示例: "推荐一些豆瓣高分科幻片", "看看TMDB上正在热映的电影"
- MCP Tool:
- 获取TMDb新作: 获取TMDb即将上映的电影或最新播出的电视剧。
- MCP Tool:
get_upcoming_or_newly_released_media
- 示例: "最近有什么新上映的电影吗?", "有哪些最近开播的电视剧?"
- MCP Tool:
2. 获取详情
- 媒体详情: 查询电影或剧集的详细信息(简介、评分、ID 等)。
- MCP Tool:
get_media_details
- 示例: "告诉我《沙丘2》的详细资料"
- MCP Tool:
- 季集信息: 查询剧集的季列表或特定季的集信息。
- MCP Tool:
get_season_episodes
- 示例: "《老友记》有几季?", "看看《怪奇物语》第4季每一集的标题"
- MCP Tool:
3. 订阅管理
- 添加订阅: 新增电影或电视剧的自动下载/监控。
- MCP Tool:
add_subscribe
- 示例: "订阅电影《沙丘2》", "订阅电视剧《黑暗荣耀》第一季,排除预告片"
- MCP Tool:
- 查看订阅: 列出所有当前订阅或特定订阅的详情。
- MCP Tool:
list_subscribes
(列出所有),get_subscribe
(获取单个) - 示例: "我现在有哪些订阅?", "我订阅了《奥本海默》吗? (使用 get_subscribe, id_type='tmdb', id_value='奥本海默的TMDB ID')", "查看订阅ID为5的详情 (使用 get_subscribe, id_type='subscribe', id_value='5')"
- MCP Tool:
- 更新订阅: 修改现有订阅的设置(如过滤规则)。
- MCP Tool:
update_subscribe
- 示例: "把我《最后生还者》的订阅改成只下载特效字幕组的版本 (需要提供完整的订阅信息,包括ID)"
- MCP Tool:
- 删除订阅: 取消订阅。
- MCP Tool:
delete_subscribe
- 示例: "取消我的《沙丘2》订阅 (使用 delete_subscribe, id_type='tmdb', id_value='沙丘2的TMDB ID')", " 删除订阅ID为5的订阅 (使用 delete_subscribe, id_type='subscribe', id_value='5')"
- MCP Tool:
- 启用/禁用订阅: 暂停或恢复订阅的自动搜索。
- MCP Tool:
set_subscribe_status
- 示例: "暂停订阅ID为3的订阅", "启用订阅ID为3的订阅"
- MCP Tool:
4. 资源查找
- 精确搜索资源: 根据 TMDB ID 或豆瓣 ID 查找可下载的种子。
- API:
GET /api/v1/search/media/{mediaid}
- 示例: "帮我找《奥本海默》的下载资源", "搜索《最后生还者》第一季所有集的下载"
- API:
- 模糊搜索资源: 根据关键词搜索种子。
- API:
GET /api/v1/search/title
- 示例: "搜索标题里有 '4K HDR 蜘蛛侠' 的资源"
- API:
5. 下载任务管理
- 添加下载: 下载一个具体的种子。
- API:
POST /api/v1/download/
- 示例: "下载刚才找到的那个《奥本海默》4K种子"
- API:
- 查看下载: 列出当前正在进行的下载任务。
- API:
GET /api/v1/download/
- 示例: "看看现在有哪些任务在下载?进度怎么样?"
- API:
- 控制下载: 暂停、恢复或删除下载任务。
- API:
GET /api/v1/download/stop/{hash}
,GET /api/v1/download/start/{hash}
,DELETE /api/v1/download/{hash}
- 示例: "暂停《沙丘2》的下载", "恢复下载《奥本海默》", "把那个下载失败的任务删掉"
- API:
6. 状态与历史查询
- 媒体库状态: 查看媒体服务器最近添加或正在播放的内容。
- API:
GET /api/v1/mediaserver/latest
,GET /api/v1/mediaserver/playing
- 示例: "我Jellyfin库里最近加了什么?", "现在有人在用Plex看电影吗?"
- API:
- 检查存在性: 查询某个媒体是否已在库中。
- API:
GET /api/v1/mediaserver/exists
- 示例: "我库里有《星际穿越》了吗?", "《老友记》第一季全集都在吗?"
- API:
- 下载历史: (可选) 查看过去的下载记录。
- API:
GET /api/v1/history/download
- 示例: "我上周下载了哪些电影?"
- API:
开发状态
- 当前状态: 逐步接入MoviePilot功能
- 未来计划: 提供MCP SSE部署方式
安全提示
- 环境安全: 本服务器需要存储MP账密,请确保你的环境安全。
- 账号安全: 建议建立一个专用的 MoviePilot 账号用于此 MCP 服务器,避免使用管理员账号。
开发指引
先决条件:
- Python 3.12+
- uv 包管理器
- 一个正在运行并可访问的 MoviePilot 服务器实例
步骤:
- 克隆仓库:
git clone https://github.com/Pollo3470/MoviePilot-MCP cd MoviePilot-MCP
- 配置:
创建
.env
文件 (可以从.env.example
复制) 并填入必要的配置信息:# .env Example MOVIEPILOT_BASE_URL=http://your-moviepilot-ip:3000 # 你的 MoviePilot 地址 MOVIEPILOT_USERNAME=your_moviepilot_username # 你的 MoviePilot 用户名 (用于密码认证) MOVIEPILOT_PASSWORD=your_moviepilot_password # 你的 MoviePilot 密码 (用于密码认证) MCP_API_KEY=your_strong_api_key # 请设置一个强随机的API密钥,用于保护MCP服务器的访问
- 创建环境:
uv sync
贡献
欢迎贡献!如果你发现 Bug 或有功能建议,请提交 Issue。如果你想贡献代码,请 Fork 仓库并发起 Pull Request。
致谢
感谢 MoviePilot 项目。本项目是基于MoviePilot的API构建的,没有MoviePilot的出色工作,这个MCP服务器将无法实现。
许可证
本项目采用 授权。