Plex媒体服务器管理工具

一个基于Python的工具,通过Plex API实现电影搜索、播放列表管理和媒体库分析功能,适用于个人媒体库整理和自动化管理。

  • by djbriane
  • Python
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 djbriane/plex-mcp

使用说明

Plex MCP服务器

这是一个基于Python的MCP服务器,它与Plex Media server API集成,用于搜索电影和管理播放列表。它使用PlexAPI库与您的Plex服务器进行无缝交互。

截图

以下是Plex MCP服务器工作原理的一些示例:

1.按导演在Plex库中查找电影

通过指定导演的姓名在Plex库中搜索电影。例如,搜索“阿尔弗雷德·希区柯克”会返回他在你的库中的电影列表。


2.为导演寻找缺失的电影

识别Plex库中缺少的特定导演的电影。这有助于您发现收藏中的空白。


3.在Plex库中创建播放列表

使用搜索中找到的电影在Plex库中创建新的播放列表。这使您能够高效地组织您的库。

设置

先决条件

  • Python 3.8或更高版本
  • uv 包管理器
  • 具有API访问权限的Plex媒体服务器

安装

通过Smithery安装

通过以下方式自动安装用于Claude Desktop的Plex媒体服务器集成 史密瑟里:

npx -y @smithery/cli install @djbriane/plex-mcp --client claude

手动安装

  1. 克隆此存储库:

    git clone <repository-url>
    cd plex-mcp
    
  2. 安装依赖项 uv:

    uv venv
    source .venv/bin/activate
    uv sync
    
  3. 为您的Plex服务器配置环境变量:

    • PLEX_TOKEN:您的Plex身份验证令牌
    • PLEX_SERVER_URL:您的Plex服务器URL(例如。,http://192.168.1.100:32400)

查找您的Plex令牌

您可以通过以下方式找到您的Plex令牌:

  • 登录Plex Web应用程序
  • 打开开发人员工具
  • 在Console选项卡中,粘贴并运行:
    window.localStorage.getItem('myPlexAccessToken')
    

与Claude一起使用

将以下配置添加到您的Claude应用程序中:

{
    "mcpServers": {
        "plex": {
            "command": "uv",
            "args": [
                "--directory",
                "FULL_PATH_TO_PROJECT",
                "run",
                "src/plex_mcp/plex_mcp.py"
            ],
            "env": {
                "PLEX_TOKEN": "YOUR_PLEX_TOKEN",
                "PLEX_SERVER_URL": "YOUR_PLEX_SERVER_URL"
            }
        }
    }
}

可用命令

Plex MCP服务器公开以下命令:

命令 描述 OpenAPI参考
search_movies 通过各种过滤器(如标题、导演、流派)在库中搜索电影,并支持 limit 控制结果数量的参数。 /library/sections/{sectionKey}/search
get_movie_details 获取特定电影的详细信息。 /library/metadata/{ratingKey}
get_movie_genres 获取特定电影的流派。 /library/sections/{sectionKey}/genre
list_playlists 列出Plex服务器上的所有播放列表。 /playlists
get_playlist_items 获取特定播放列表中的项目。 /playlists/{playlistID}/items
create_playlist 使用指定的电影创建新的播放列表。 /playlists
delete_playlist 从Plex服务器中删除播放列表。 /playlists/{playlistID}
add_to_playlist 将电影添加到现有播放列表中。 /playlists/{playlistID}/items
recent_movies 从您的库中获取最近添加的电影。 /library/recentlyAdded

运行测试

该项目包括单元测试和集成测试。使用以下说明运行每种类型的测试:

单元测试

单元测试使用虚拟数据来验证每个模块的功能,而不需要实时Plex服务器。

要运行所有单元测试,请执行以下操作:

uv run pytest

集成测试

使用.env文件中定义的环境变量对实时Plex服务器运行集成测试。首先,使用Plex配置在项目根目录中创建.env文件:

PLEX_SERVER_URL=https://your-plex-server-url:32400
PLEX_TOKEN=yourPlexTokenHere

集成测试用集成标记。要仅运行集成测试,请执行以下操作:

uv run pytest -m integration

如果您遇到与Plex服务器的连接问题,请尝试运行集成测试以帮助排除故障。

代码风格和惯例

  • 模块结构:
    为导入、日志设置、实用函数、类定义、全局帮助程序、工具方法和主执行使用清晰的节标题(由保护 if __name__ == "__main__":).

  • 命名:
    类使用CamelCase,函数、变量和夹具使用lower_snake_case。在测试中,列出内置夹具(例如。 monkeypatch)在定制之前。

  • 文件和评论:
    为每个模块、类和函数提供一个简洁的文档字符串,并为复杂的逻辑提供内联注释。

  • 错误处理和日志记录:
    使用Python logging 具有一致错误消息(前缀“error:”)和显式异常处理的模块。

  • 异步模式:
    将I/O绑定函数定义为异步并使用 asyncio.to_thread() 以处理阻塞操作。