Skip to main content
Glama

MoviePilot MCP 服务器

License: MIT

这是一个 模型上下文协议 (MCP - Model Context Protocol) 服务器实现,用于连接大型语言模型 (LLM) 与 MoviePilot 媒体库自动化管理服务器。

目标

本项目旨在让用户能够通过自然语言与他们的 MoviePilot 实例进行交互,从而实现以下功能:

  • 搜索和发现 电影、电视剧及相关信息。

  • 查询 媒体详情、季集信息、演员阵容和推荐。

  • 查找 可用的下载资源 (种子)。

  • 管理 媒体订阅(添加、查看、更新、删除、启用/禁用)。

  • 控制 下载任务(添加、查看状态、暂停、恢复、删除)。

  • 获取 媒体库状态(最近添加、正在播放、检查存在性)。

通过将 MoviePilot 的功能暴露给 LLM,用户可以在支持 MCP 的聊天应用(如 Cherry Studio 或集成了 MCP 的客户端)中,用对话的方式轻松管理媒体库。

Related MCP server: yarr-media-stack-mcp

使用方式

1. 使用 Docker 运行 streamable http 服务端

本项目支持使用 Docker 进行部署。您可以从 Docker Hub 拉取预构建的镜像。

Docker Hub 镜像: pollo3470/moviepilot-mcp

a. 使用 docker run

  1. 拉取镜像:

    docker pull pollo3470/moviepilot-mcp:latest
  2. 准备 .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
  3. 运行容器:

    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文件。

  1. 准备 .env 文件:docker-compose.yml 同级,创建一个 .env 文件,并填入必要的配置信息,如上文 docker run 部分所述。* 确保 MCP_API_KEY 已设置。*

  2. 运行: 在docker-compose.yml文件所在目录下执行:

    docker-compose up -d

    此命令会拉取最新镜像(如果本地没有或有更新)并启动服务。

    要停止服务,请运行:

    docker-compose down

启动后,streamable http 的 MCP 服务将在 http://localhost:8000/mcp (或您配置的主机和端口) 上可用。请确保在客户端请求时,在 HTTP Header 中包含 Authorization 并填入您在 .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

    • 示例: "搜索电影《星际穿越》", "找找演员 '基努·里维斯'"

  • 探索: 探索来自豆瓣、TMDB的电影、电视剧。

    • MCP Tool: discover_douban_media, discover_tmdb_media

    • 示例: "推荐一些豆瓣高分科幻片", "看看TMDB上正在热映的电影"

  • 获取TMDb新作: 获取TMDb即将上映的电影或最新播出的电视剧。

    • MCP Tool: get_upcoming_or_newly_released_media

    • 示例: "最近有什么新上映的电影吗?", "有哪些最近开播的电视剧?"

2. 获取详情

  • 媒体详情: 查询电影或剧集的详细信息(简介、评分、ID 等)。

    • MCP Tool: get_media_details

    • 示例: "告诉我《沙丘2》的详细资料"

  • 季集信息: 查询剧集的季列表或特定季的集信息。

    • MCP Tool: get_season_episodes

    • 示例: "《老友记》有几季?", "看看《怪奇物语》第4季每一集的标题"

3. 订阅管理

  • 添加订阅: 新增电影或电视剧的自动下载/监控。

    • MCP Tool: add_subscribe

    • 示例: "订阅电影《沙丘2》", "订阅电视剧《黑暗荣耀》第一季,排除预告片"

  • 查看订阅: 列出所有当前订阅或特定订阅的详情。

    • 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: update_subscribe

    • 示例: "把我《最后生还者》的订阅改成只下载特效字幕组的版本 (需要提供完整的订阅信息,包括ID)"

  • 删除订阅: 取消订阅。

    • 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: set_subscribe_status

    • 示例: "暂停订阅ID为3的订阅", "启用订阅ID为3的订阅"

4. 资源查找

  • 精确搜索资源: 根据 TMDB ID 或豆瓣 ID 查找可下载的种子。

    • API: GET /api/v1/search/media/{mediaid}

    • 示例: "帮我找《奥本海默》的下载资源", "搜索《最后生还者》第一季所有集的下载"

  • 模糊搜索资源: 根据关键词搜索种子。

    • API: GET /api/v1/search/title

    • 示例: "搜索标题里有 '4K HDR 蜘蛛侠' 的资源"

5. 下载任务管理

  • 添加下载: 下载一个具体的种子。

    • API: POST /api/v1/download/

    • 示例: "下载刚才找到的那个《奥本海默》4K种子"

  • 查看下载: 列出当前正在进行的下载任务。

    • API: GET /api/v1/download/

    • 示例: "看看现在有哪些任务在下载?进度怎么样?"

  • 控制下载: 暂停、恢复或删除下载任务。

    • API: GET /api/v1/download/stop/{hash}, GET /api/v1/download/start/{hash}, DELETE /api/v1/download/{hash}

    • 示例: "暂停《沙丘2》的下载", "恢复下载《奥本海默》", "把那个下载失败的任务删掉"

6. 状态与历史查询

  • 媒体库状态: 查看媒体服务器最近添加或正在播放的内容。

    • API: GET /api/v1/mediaserver/latest, GET /api/v1/mediaserver/playing

    • 示例: "我Jellyfin库里最近加了什么?", "现在有人在用Plex看电影吗?"

  • 检查存在性: 查询某个媒体是否已在库中。

    • API: GET /api/v1/mediaserver/exists

    • 示例: "我库里有《星际穿越》了吗?", "《老友记》第一季全集都在吗?"

  • 下载历史: (可选) 查看过去的下载记录。

    • API: GET /api/v1/history/download

    • 示例: "我上周下载了哪些电影?"

开发状态

  • 当前状态: 逐步接入MoviePilot功能

  • 未来计划: 提供MCP SSE部署方式

安全提示

  • 环境安全: 本服务器需要存储MP账密,请确保你的环境安全。

  • 账号安全: 建议建立一个专用的 MoviePilot 账号用于此 MCP 服务器,避免使用管理员账号。

开发指引

先决条件:

  • Python 3.12+

  • uv 包管理器

  • 一个正在运行并可访问的 MoviePilot 服务器实例

步骤:

  1. 克隆仓库:

    git clone https://github.com/Pollo3470/MoviePilot-MCP
    cd MoviePilot-MCP
  2. 配置: 创建 .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服务器的访问
  3. 创建环境:

    uv sync

贡献

欢迎贡献!如果你发现 Bug 或有功能建议,请提交 Issue。如果你想贡献代码,请 Fork 仓库并发起 Pull Request。

致谢

感谢 MoviePilot 项目。本项目是基于MoviePilot的API构建的,没有MoviePilot的出色工作,这个MCP服务器将无法实现。

许可证

本项目采用 MIT License 授权。

Available Tools

10 tools
add_subscribeA
添加新的媒体订阅
订阅数据需要至少包含tmdbid、doubanid或bangumiid中的一个
Args:
    subscribe_data: 订阅数据
ParametersJSON Schema
NameRequiredDescriptionDefault
subscribe_dataYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states the purpose and a data requirement but does not disclose side effects, return values, error handling, duplicate behavior, or permission requirements. This is minimal for a write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the purpose, followed by the key requirement. However, the 'Args: subscribe_data: 订阅数据' line is redundant with the schema parameter name and adds no new information, slightly reducing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool accepts a complex Subscribe object with ~30 fields, has no output schema, and no annotations. The description omits return behavior, error conditions, and how the subscription will be processed, making it insufficient for an agent to fully understand the tool's behavior and consequences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema's top-level parameter 'subscribe_data' has no description (coverage 0%). The description adds a crucial validation rule—requiring at least one of tmdbid, doubanid, or bangumiid—which is not expressed in the schema. It does not explain the many nested fields, but they are present in the schema with some descriptions, so the added rule is significant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states '添加新的媒体订阅' (Add new media subscription), specifying the verb 'add' and resource 'subscription'. This distinguishes it from sibling tools like list_subscribes, get_subscribe, update_subscribe, and delete_subscribe, as it uniquely indicates creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear prerequisite: subscription data must contain at least one of tmdbid, doubanid, or bangumiid. This gives context for when to use the tool, though it does not explicitly mention alternatives or when not to use it (e.g., for updates).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_subscribeA
删除订阅。可以通过订阅ID或媒体ID(tmdb/douban)进行删除。

Args:
    id_type: ID类型 ("subscribe", "tmdb", "douban")
    id_value: 订阅ID 或 媒体ID值 (例如 123)
    season: 季号 (可选, 仅当 id_type 为 "tmdb" 或 "douban" 时有效)

Returns:
    删除操作的结果信息。
ParametersJSON Schema
NameRequiredDescriptionDefault
seasonNo
id_typeYes
id_valueYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses deletion behavior, supported ID types, and the conditional season parameter, but lacks details on return format, error handling, or side effects beyond a generic 'result information' note.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct and organized, front-loaded with the purpose, followed by a clear list of args and returns. Every sentence adds value, with no superfluous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While parameter explanations are thorough, the return value description is vague ('result information') and there's no mention of potential errors or prerequisites. For a delete tool without annotations or output schema, this is a notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description fully explains all three parameters, including enum values, examples, and the conditional behavior of season, compensating for the 0% schema description coverage. It adds meaning beyond the schema's title and enum definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool deletes a subscription and supports deletion by subscription ID or media ID (tmdb/douban). This distinguishes it from sibling tools like add_subscribe, update_subscribe, and get_subscribe, with a specific verb and resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for deleting subscriptions but provides no explicit guidance on when to use this tool versus alternatives like update_subscribe. It does give specific guidance on when the season parameter is applicable, which is a partial usage guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_douban_mediaC
基于过滤条件探索豆瓣电影/电视剧

Args:
    filters: 过滤条件
    page: 页码

Returns:
    媒体信息列表。
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
filtersYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only mentions filter conditions and page number, and states a return list. It does not explain read-only safety, pagination behavior, rate limits, or error handling, which is a significant gap for a discovery tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with a one-sentence summary followed by Args/Returns. There is no fluff, and the structure is clear, though it is almost too terse to be useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex discovery tool with a nested filters object containing five sub-parameters, no output schema, and no annotations. The description is severely incomplete, lacking filter semantics, pagination details, response structure, and differentiation from the sibling discover_tmdb_media tool. It does not adequately inform an agent for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no meaning beyond the input schema. It simply restates 'filters' as '过滤条件' and 'page' as '页码', without explaining the nested object structure or available fields. The schema itself contains detailed descriptions, but the tool description contributes nothing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool explores Douban movies/TV shows based on filter conditions, which is a specific verb+resource combination. It does not explicitly distinguish from sibling tools like discover_tmdb_media, but the Douban scope and tool name provide differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as search_media_or_person or discover_tmdb_media. There are no exclusions or contextual recommendations, leaving the agent to guess usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_tmdb_mediaC
基于过滤条件探索TMDB电影/电视剧

Args:
    filters: 过滤条件
    page: 页码

Returns:
    媒体信息列表
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
filtersYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It only states '探索' and mentions returning a media list, but does not clarify read-only nature, pagination behavior, authentication requirements, or any side effects. This is minimal disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief, front-loaded with a clear purpose sentence, and uses a clean Args/Returns structure. It contains no fluff, though it could still be informative within the same length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (many filter options inside TMDBDiscover) and lack of output schema, the description is under-specified. It does not explain the structure of filters or the shape of the returned list, which is insufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description lists only 'filters' and 'page' with generic Chinese labels, adding no meaning beyond the schema. With 0% schema description coverage and a complex TMDBDiscover object, the description fails to compensate, leaving the agent without explanation of filter semantics or page usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states '探索TMDB电影/电视剧' with filter conditions, identifying a specific verb (explore), resource (TMDB movies/TV), and scope (based on filters). This distinguishes it from sibling tools like discover_douban_media and search_media_or_person.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is provided on when to use this tool versus alternatives. The description only implies use for filtered TMDB discovery but does not mention sibling tools or exclusions, leaving the agent without clear decision criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_media_detailsC
获取媒体详细信息
Args:
    id_type: ID类型 (tmdb/douban)
    id_value: ID值
    media_type: 媒体类型 (电影/电视剧)
    title: 媒体标题
    year: 年份

Returns: 媒体详细信息
ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
titleNo
id_typeYes
id_valueYes
media_typeYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It only states a return of '媒体详细信息' (media details) without disclosing any behavioral traits, such as how title/year are used, error handling, or required permissions. The lack of safety or side-effect information is notable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a one-line summary, a bullet-like list of args, and a one-line return statement. It is easy to parse and does not contain unnecessary verbiage, though it could benefit from richer details without harming conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no behavioral annotations, the description leaves the return format, potential errors, and the role of optional parameters (title, year) unexplained. For a tool with five parameters, this is insufficient context for an agent to reliably use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate. It lists parameter names with brief Chinese labels, but these largely mirror the schema (e.g., enums for id_type and media_type). No additional meaning is provided about parameter formats, relationships, or validation rules, leaving gaps for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves media details ('获取媒体详细信息'), with a specific verb and resource. It differentiates from siblings like search_media_or_person and discover_* tools by focusing on detail lookup, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus other related tools. It simply lists parameters and a return value, leaving the agent to infer that it is for fetching details by known IDs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_season_episodesB
获取剧集的对应季的分集信息
Args:
    source_id: 媒体ID (tmdbid)
    season_number: 季号
    source: 数据源 ("tmdb")

Returns: 分集信息列表
ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNotmdb
source_idYes
season_numberYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states it returns a list of episode info but does not mention that it is a read-only operation, potential error conditions, pagination, or that data comes from TMDB (though source is mentioned in Args). This is minimal coverage for a tool with no annotation fallback.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and well-structured, with a clear purpose line followed by Args and Returns sections. Every sentence serves a purpose with no wasted words, and the information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with only 3 parameters and no output schema, the description provides the essential purpose, args, and return type. However, it lacks contextual details such as expected output structure, edge cases, or confirmation that only TMDB is supported. It is adequate but not rich.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate. It provides inline comments for all three parameters: source_id is 'media ID (tmdbid)', season_number is 'season number', and source is 'data source (tmdb)'. This adds meaning beyond the schema, though it does not detail formats or constraints beyond what the schema already indicates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states '获取剧集的对应季的分集信息' (get episode info for the corresponding season of a series), which is a specific verb+resource. It distinguishes from siblings like get_media_details by focusing on season episodes. However, it does not explicitly differentiate from alternative tools that might provide similar data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives. The purpose implies using it to fetch season episodes, but there is no mention of exclusions or comparison to sibling tools such as get_media_details or search_media_or_person. The agent must infer usage from the description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_subscribeA
获取订阅信息。可以通过订阅ID或媒体ID(tmdb/douban)进行查询。

Args:
    id_type: ID类型 ("subscribe", "tmdb", "douban")
    id_value: 订阅ID 或 媒体ID值
    season: 季号 (可选, 仅当 id_type 为 "tmdb" 或 "douban" 时有效)

Returns:
    订阅详细信息,如果未找到则返回 None。
ParametersJSON Schema
NameRequiredDescriptionDefault
seasonNo
id_typeYes
id_valueYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of disclosure. It discloses the return value (subscription details or None if not found) and the conditional behavior of the season parameter. It does not explicitly state read-only nature, potential side effects, or authentication requirements, but for a retrieval operation this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with distinct Args and Returns sections. Every sentence adds value without redundancy, making it easy for an agent to parse and extract key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward get tool, the description covers: purpose, query modes, parameter semantics, and return behavior including the None case. It does not mention explicit integration with sibling tools or provide examples, but the tool's simplicity means the description is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The Args section thoroughly explains all three parameters, including the enum values for id_type, the meaning of id_value, and the conditional relevance of season. Since the input schema has no property descriptions (0% coverage), this fully compensates for the schema's lack of semantic detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states '获取订阅信息' (get subscription information) and specifies querying by subscribe ID or media ID (tmdb/douban), indicating a concrete resource and action. However, it does not explicitly distinguish this from sibling tools like get_media_details, though the subject (subscriptions) is distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving subscription records and provides parameter-level guidance (e.g., season is only valid for tmdb/douban). It does not explicitly mention when to use this tool versus alternatives such as list_subscribes or get_media_details, so the usage context is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_subscribesA
列出用户所有媒体订阅

Returns:
    订阅信息列表
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosure. It only states the listing action and return type, but does not mention whether it is read-only, whether pagination is involved, or any prerequisites. Minimal additional behavioral context beyond the obvious.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, composed of two short statements that state the purpose and return value. Every word is useful, and there is no unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with no inputs and no output schema, the description adequately covers the essential purpose and return type. It could benefit from explicit read-only or usage context, but given the low complexity, it is mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, so the baseline score is 4. The description does not need to explain parameters; the input schema is empty and fully covers this.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states '列出用户所有媒体订阅' (List all media subscriptions of the user), using a specific verb and resource. It distinguishes itself from sibling tools such as get_subscribe (single subscription) and add/update/delete by explicitly indicating a full listing operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is provided for when to use this tool versus alternatives. Although sibling tools include get_subscribe, the description does not mention selection criteria or contrast with other subscription-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_media_or_personB
根据名称搜索相关的媒体/演员信息
Args:
    type_name: 类型 (media/person)
    name: 名称 (模糊搜索)

Returns: 媒体信息列表
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
type_nameYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses fuzzy search ('模糊搜索') and the return type ('媒体信息列表'), but leaves significant ambiguity: searching for 'person' still returns 'media info list', and there is no mention of read-only behavior, pagination, or error scenarios.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, front-loaded with the purpose, and structured with Args and Returns sections. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the tool is simple with only two parameters and no output schema, the description is incomplete: it does not clarify the return structure for person searches (the tool name says 'media_or_person' but returns 'media info list'), and it lacks usage guidance or behavioral expectations beyond fuzzy search.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description compensates by explaining both parameters: type_name as '类型 (media/person)' and name as '名称 (模糊搜索)'. This adds meaning beyond the schema, particularly the 'fuzzy search' qualifier for name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that it searches for media/actor information by name, which is a specific verb-resource pair. It does not explicitly differentiate from sibling tools like discover_douban_media or discover_tmdb_media, but the scope (media/person) is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for name-based searches ('根据名称搜索'), but provides no explicit context about when to use this tool versus alternatives, nor does it mention any exclusions or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_subscribeA
更新现有订阅。请求体中必须包含 'id' 字段。

Args:
    subscribe_data: 包含订阅ID ('id') 和其他要更新字段的订阅对象。

Returns:
    更新后的订阅信息。
ParametersJSON Schema
NameRequiredDescriptionDefault
subscribe_dataYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that an update occurs and returns the updated subscription, but it omits critical details such as whether the update is partial or full, what happens if the id does not exist, permission requirements, or any side effects. This is a mutation tool without adequate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured with summary, Args, and Returns sections. Every sentence provides necessary information, and the key point about requiring 'id' is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool updates a complex object with many fields, but the description only covers the core requirement (id) and the return value. The schema is rich but lacks descriptions for most properties, so the description leaves significant gaps. It is minimally viable but not complete for such a complex mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter (subscribe_data) with 0% description coverage, but the description adds meaning by explaining the object must contain 'id' and other fields to update, conveying partial-update semantics. It does not detail the many individual fields, leaving the agent to rely on property names in the schema, which is only partially self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update existing subscription' (更新现有订阅), a specific verb+resource that distinguishes it from siblings like add_subscribe, list_subscribes, get_subscribe, and delete_subscribe. It also emphasizes the required 'id' field, reinforcing the update intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for modifying an existing subscription and explicitly notes that 'id' must be included in the request body. However, it does not provide explicit when-to-use or when-not-to-use guidance, nor does it reference alternative tools like add_subscribe for creation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 10 tool updatesv0.1.0
    • First observedadd_subscribe
    • First observeddelete_subscribe
    • First observeddiscover_douban_media
    • First observeddiscover_tmdb_media
    • First observedget_media_details
    • First observedget_season_episodes
    • First observedget_subscribe
    • First observedlist_subscribes
    • First observedsearch_media_or_person
    • First observedupdate_subscribe

TDQS

B3.3/5.0
Disambiguation4/5

Most tools have clear, distinct purposes: search_media_or_person is by name, discover_* are by filters, and subscription tools are CRUD operations. There is slight overlap between search and discover (both find media), but descriptions adequately differentiate them. The subscription functions are unambiguous.

Naming Consistency4/5

Tool names consistently follow a verb_noun snake_case pattern (e.g., add_subscribe, get_media_details). The only minor deviation is 'list_subscribes' being plural while others use singular forms, but the overall pattern is predictable and readable.

Tool Count5/5

With 10 tools, the server is well-scoped for its purpose of media discovery and subscription management. Each tool serves a distinct function, and the count is within the ideal range, avoiding both bloat and sparsity.

Completeness4/5

The subscription lifecycle is fully covered with add, list, get, update, and delete. Media discovery and details are covered for movies/TV, and season episodes are available. A minor gap is the lack of detailed person information, since search_media_or_person can return people but there's no tool to fetch person-specific details.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Pollo3470/MoviePilot-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server