Skip to main content
Glama
liu-xindi

polylens-bilibili

by liu-xindi

polylens-bilibili-mcp

读取 B 站视频、评论、字幕等公开信息的 MCP 服务,支持用 jq 在返回前筛选和裁剪结果,可本地运行,也可通过 HTTP + OAuth 远程接入。只读,不向平台写入任何数据。

工具

工具

说明

search_videos

按关键词搜索视频,每批 30 条,最多 30 页

suggest_keywords

搜索框联想词

get_feed

首页推荐流,每批 30 条

get_up_info

UP 主资料:签名、粉丝、获赞、等级、认证等,可一次查多个

list_up_videos

UP 主投稿,每批最多 40 条,可按最新、播放、收藏排序

get_video_info

标题、作者、发布时间、简介与各项统计,可一次查多个视频或分 P

get_parts

分 P 清单,可一次查多个视频

get_danmaku_counts

每个分 P 的弹幕数,可一次查多个视频,?p=1-12 取指定范围

get_comments

主评论,热度序或时间序,游标续取

get_comment_replies

某条主评论下的二级评论

get_subtitles

逐句字幕,含起止秒数,可指定语种

start_qr_login · complete_qr_login

扫码登录

get_login_status · logout

查询登录状态、退出登录

get_version

运行中的版本与 PyPI 最新版本,用于判断工具说明是否为旧缓存、服务是否需要升级;传 since 可查之后的用法变化

Related MCP server: Bilibili MCP Server

登录

除登录相关工具与 get_version 外都需要登录,每次调用前联网核验登录状态。start_qr_login 返回二维码,用 B 站 App 扫码确认后,由 complete_qr_login 完成登录。凭据保存在 ~/.cache/polylens-bilibili/cookie(设置了 XDG_CACHE_HOME 时位于其下),logout 会删除它。

用 jq 精简返回

search_videos、list_up_videos、get_feed、get_video_info、get_up_info、get_parts、get_danmaku_counts、get_comments、get_comment_replies、get_subtitles 必须传 jq 参数,在返回前筛选条目或裁剪字段,减少上下文占用。表达式由模型自行编写,传 . 则原样返回,例如:

用途

表达式

字幕只要文本

map(.content) | join("\n")

只看第 10 到 15 分钟的字幕

[.[] | select(.start >= 600 and .start < 900)]

搜索结果只留高播放量

[.[] | select(.view_count > 100000) | {title, url, view_count}]

安装

需要 uv,没有 Python 3.13+ 时 uv 会自动下载。

接入 Claude Code:

claude mcp add polylens-bilibili -- uvx polylens-bilibili-mcp

接入 Claude Desktop,在 claude_desktop_config.json 中加入:

{
  "mcpServers": {
    "polylens-bilibili": {
      "command": "uvx",
      "args": ["polylens-bilibili-mcp"]
    }
  }
}

升级:重启客户端,uvx 启动时会取最新版本。

从源码运行

git clone https://github.com/liu-xindi/polylens-bilibili-mcp.git
cd polylens-bilibili-mcp && uv sync
claude mcp add polylens-bilibili -- uv run --directory /绝对路径/polylens-bilibili-mcp polylens-bilibili-mcp

升级:git pull && uv sync。

远程访问(HTTP + OAuth)

供 claude.ai 网页端或手机端以连接器接入。服务以 Streamable HTTP 运行并内置 OAuth,默认只监听本机,需由反向代理以 HTTPS 暴露到公网地址。

POLYLENS_BILIBILI_TRANSPORT=http \
POLYLENS_BILIBILI_PUBLIC_URL=https://example.com \
POLYLENS_BILIBILI_AUTH_SECRET='<口令>' \
uvx polylens-bilibili-mcp

然后在 claude.ai 添加连接器,URL 填 https://example.com/mcp,首次授权时在同意页输入上面的口令。

环境变量

命令行

默认

说明

POLYLENS_BILIBILI_TRANSPORT

--transport

stdio

stdio 或 http

POLYLENS_BILIBILI_HTTP_HOST

--host

127.0.0.1

监听地址

POLYLENS_BILIBILI_HTTP_PORT

--port

6622

监听端口

POLYLENS_BILIBILI_PUBLIC_URL

--public-url

无

公网地址

POLYLENS_BILIBILI_AUTH_SECRET

无

无

机主口令

POLYLENS_BILIBILI_INSECURE_NO_AUTH

无

否

关闭鉴权,仅限本机调试

POLYLENS_BILIBILI_PROXY

无

无

取字幕用的 HTTP 代理,如 http://10.0.0.2:8888。平台对海外 IP 不返回字幕,部署在海外时需要设置;其余请求始终直连

命令行优先于环境变量。http 模式下公网地址和口令缺一则拒绝启动。开启 INSECURE_NO_AUTH=1 后任何能连到端口的人都能调用全部工具,包括使用已保存的登录凭据。

评论限速

平台会拦截频繁的请求,被拦后约 15 分钟恢复。为此:

  • 评论每分钟最多 30 页,超出时排队等待。

  • 被拦后评论工具停用 15 分钟,恢复后自动可用,其他工具不受影响。

  • 评论结果按整次调用缓存:除 jq 外参数相同的调用直接返回缓存,不占额度,被拦期间也能返回。只缓存完整的结果,不设有效期,总量超过约 50 MB 时淘汰最久没用的,服务重启后清空。

  • 弹幕数按分段缓存,与评论共用上述上限,refresh 重取。

免责声明与许可证

本工具供个人学习与研究使用。需要登录的功能以使用者本人的凭据,在其账号权限范围内访问,不绕过付费墙或内容保护。所获内容版权归原发布方,使用者须自行遵守法律、平台条款与版权规定,并承担使用后果。

以 Apache License 2.0 授权,按现状提供,不附任何担保。

Available Tools

16 tools
complete_qr_loginC

取回凭据并写入本地。

(finish QR code login, poll QR status)

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesstart_qr_login 返回的 key。
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
messageYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations provide readOnlyHint=false and openWorldHint=true, so the write and network nature is partially covered. The description adds little beyond this; offline credential persistence is not mentioned, and the output schema means return values needn't be explained. It also awkwardly says 'poll QR status', which implies a polling read behavior inconsistent with the declared 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.

Conciseness2/5

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

The text is short but poorly structured: the main Chinese description is vague, the useful English gloss is relegated to a parenthetical below it, and the purpose is split across two lines. Front-loading the actual action would improve this significantly.

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?

Given this is a stateful two-step login flow with a sibling start_qr_login and a 100% schema coverage plus output schema, the description is just barely adequate. It names the flow step but omits prerequisites (requires a valid key from start_qr_login), state expectations (QR must be scanned), and the side effect of persisting credentials locally.

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?

Schema coverage is 100%, so both parameters are already documented in the schema, including the linkage of 'key' to start_qr_login. This establishes the baseline of 3; the description adds no parameter-level detail beyond what the schema provides.

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

Purpose3/5

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

The English gloss 'finish QR code login' states a recognizable verb+resource, but the primary description is the vague Chinese phrase '取回凭据并写入本地' (retrieve credentials and write locally), which describes an effect rather than the operation. The parenthetical is more informative than the main text, which is backwards and muddled.

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 parenthetical 'finish QR code login, poll QR status' implies this is the completion step in a flow that starts with the sibling start_qr_login, which gives usable context. However it never explicitly says when to call this versus get_login_status, nor what preconditions exist.

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

get_comment_repliesA
Read-only

二级评论按时间正序排列。

total 是该主评论下平台能列出的二级评论总数,可用来算页数。 withheld 是该主评论下平台未列出的二级评论条数(已删除或被折叠)。 某条主评论取不到(评论不存在、不属于这个视频)时只在它的 error 里说明,其他照常返回。 中途被风控或限流时,已取完的照常返回,其余的 error 里说明原因。 parent_id 为空表示直接回复主评论,否则是所回复的那条二级评论的 id。 parent_id 指向的二级评论不在列表里时,那条被平台隐藏了,取不到。 除 jq 外参数相同的调用返回同一结果,from_cache 表示是否来自缓存; 被限速的不完整结果不缓存,要新数据用 refresh。 调用没收到结果时服务端仍会取完,之后用相同参数再取直接用缓存。 image_urls、link_titles 是字符串,多个时以换行分隔。

(comment replies, sub-replies, thread)

ParametersJSON Schema
NameRequiredDescriptionDefault
jqYes必填的 jq 表达式。输入是单条主评论下的二级评论组成的数组,每条字段:id,author,author_url,author_level,is_up,ip_location,content,like_count,parent_id,created_at,is_top,up_liked,image_urls,link_titles。体积大、多数任务用不到的字段:author_url(查看评论者资料时需要)、is_up、created_at、is_top、up_liked;特定任务需要时照常使用。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
pagesYes每条主评论取几页,每页 20 条。has_more 表示后面还有。与主评论合计每分钟约取 30 页,取得多则耗时长,可以分几次取。
videoYes视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。
refreshNo跳过缓存重新取,并更新缓存。
start_pageNo每条主评论从第几页开始,1 起。
comment_idsYes主评论 id 列表,从 get_comments 返回的 comments 表里取。
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes
video_idYes
cached_atNo
elapsed_sNo
from_cacheNo

TDQS

A3.6/5.0
Behavior5/5

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

Exceptional disclosure beyond annotations: chronological ordering, total/withheld counting semantics, per-comment error isolation (a failed main comment only surfaces in its own error), partial-return behavior under rate limiting, cache identity rules, and the fact that rate-limited incomplete results are not cached. It is fully consistent with readOnlyHint=true and safe to call.

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

Conciseness3/5

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

Every sentence carries real behavioral payload, which is a strength, but the text is not front-loaded: it opens with an ordering detail rather than what the tool returns, and the purpose only emerges from the accumulating details. Structure is dense but reader-hostile on first pass.

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

Completeness5/5

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

With an output schema and annotations present, the description needn't explain return values, and it still covers caching, error isolation, rate limiting, and withholding semantics thoroughly. For a 7-parameter, paginated, cached read tool, an agent has everything needed to call it correctly.

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?

Schema description coverage is 100%, so the schema already documents all 7 parameters and the baseline is 3. The description adds marginal value on refresh/pages caching semantics, but the meanings of comment_ids, video, start_page and jq are already supplied by the schema.

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

Purpose3/5

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

The description details the content (二级评论 under a main comment) and closes with the keyword hint '(comment replies, sub-replies, thread)', so an agent can infer the resource. But there is no explicit verb-first statement of what the tool does, and no differentiation from the sibling get_comments, which fetches main comments vs. these sub-replies. Purpose is inferable but not stated.

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?

It gives actionable operational guidance—use refresh for new data, split heavy fetches across calls due to the ~30 pages/min limit, and cache reuse across identical-parameter calls. However it never states when to use this tool over get_comments or any alternative sibling, so selection guidance is only implied.

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

get_commentsA
Read-only

不含二级评论,二级评论通过 get_comment_replies 获取。

image_urls、link_titles 是字符串,多个时以换行分隔。

(video comments)

ParametersJSON Schema
NameRequiredDescriptionDefault
jqYes必填的 jq 表达式。输入是本批条目组成的数组,每条字段:id,author,author_url,author_level,is_up,ip_location,content,like_count,reply_count,parent_id,created_at,is_top,up_liked,image_urls,link_titles。体积大、多数任务用不到的字段:author_url(查看评论者资料时需要)、is_up、created_at、is_top、up_liked;特定任务需要时照常使用。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
modeNo排序方式:hot 是平台的综合排序。hot 的 cursor 只标识浏览会话,进度记在平台侧,翻页与重放靠 batch_id;同一视频同一时间只用一个 hot cursor:新开会话(包括其他对话里的)后,旧 cursor 会重复取过的内容或提前返回空,混用时新的也会回退;遇到时从 cursor 为空重新开始。newest 按时间倒序,cursor 含位置,可重复取同一批,不受新会话影响。需要完整抓取或断点续取时用 newest。缓存:除 jq 外参数相同的调用返回同一结果,from_cache 表示是否来自缓存;被限速的不完整结果不缓存。newest 要新数据用 refresh,hot 换 batch_id 取下一批。调用没收到结果时服务端仍会取完,之后用相同参数再取直接用缓存。hot
countYes至少取多少条主评论。平台按每页约 20 条整页返回,实际条数可能多于 count;评论不够时返回剩余的全部。主评论与二级评论合计每分钟约取 30 页(约 600 条),取得多则耗时长,可以分几次取。
videoYes视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。
cursorNo续取游标:不传从头开始,回传上次返回的 next_cursor 取下一批。
refreshNo跳过缓存重新取,并更新缓存。仅用于 newest。
batch_idNomode=hot 时必填。自定的短字符串:其他参数相同时,同一个值返回同一批,换新值取下一批。重放结果与之前不同时,原批次已丢失,需要就从 cursor 为空重新开始。
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
messageNo
commentsYes
has_moreYes
jq_countNo
video_idYes
cached_atNo
elapsed_sNo
from_cacheNo
next_cursorNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the output-format detail that image_urls and link_titles are newline-delimited strings, which is genuinely useful and not in the annotations. However, it says nothing about pagination, caching, or rate limits — those live entirely in the schema, so the description's independent contribution is modest.

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?

Extremely terse and front-loaded: the reply exclusion, the alternative tool, and the field-format note are all delivered with zero filler. The trailing "(video comments)" fragment is slightly awkward but functions as the resource label.

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?

An output schema exists, so return-value explanation is not required, and the rich schema carries pagination/caching/mode semantics. Given that, the description covers what it uniquely must: scope (top-level only) and the routing alternative. Only the thin positive statement of purpose keeps it from a 5.

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?

Schema description coverage is 100% and the parameter descriptions are unusually detailed (mode/cursor/batch_id pagination and caching semantics), so the baseline is 3. The description adds no input-parameter meaning at all — the newline-separated note concerns output fields, not the 8 input params — so it cannot exceed baseline.

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 identifies the resource ("video comments") and scopes it precisely by excluding second-level comments, then names the sibling get_comment_replies that handles them. An agent can distinguish it from get_comment_replies and get_video_info without opening a schema, though it never states the verb explicitly.

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?

It gives an explicit routing rule: replies are NOT returned here and must be fetched via get_comment_replies. That is a clear when-to-use-this-vs-alternative statement for the main ambiguity. It does not address other sibling tools or when this tool is inappropriate beyond the reply case.

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

get_danmaku_countsA
Read-only

每个视频一组,每段一行,段号看 page。不写 ?p= 取全部分段。

danmaku_count 由平台封顶,分段越长上限越高(如约 8 分钟的为 2000、约 30 分钟的 为 6000、45 分钟以上的为 12000),达到上限时实际弹幕更多。 按段缓存,cached_at 非空表示来自缓存及其抓取时间,要新数据用 refresh。 调用没收到结果时服务端仍会取完,之后再取直接用缓存。

(danmaku count per part)

ParametersJSON Schema
NameRequiredDescriptionDefault
jqYes必填的 jq 表达式。输入是单个视频的分段组成的数组,每条字段:page,part,duration,danmaku_count,cached_at,error。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
videosYes视频列表,每项为链接、b23.tv 短链或裸 BV/av 号。?p= 可写单段或范围,如 ?p=3、?p=1-12、?p=1-3,7。
refreshNo跳过缓存重新取,并更新缓存。
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes
elapsed_sNo

TDQS

A3.9/5.0
Behavior5/5

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

The description discloses behavior far beyond the readOnly/openWorld annotations: platform caps on danmaku_count that scale with part duration, per-part caching with cached_at semantics, refresh to bypass cache, and the non-obvious fact that the server finishes fetching even when the caller receives no result (with the next call served from cache). This is exactly the kind of operational context an agent cannot infer from structured fields.

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?

Content is dense and mostly front-loaded: output layout first, then caps, then caching, then the timeout caveat. Every sentence carries information, though the cap examples and cache prose are somewhat verbose and the layout is a loose bullet-like stream rather than tight prose.

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?

An output schema exists, yet the description usefully complements it by explaining caching fields and cap semantics that the schema cannot convey. For a read-only, open-world fetch tool the coverage is nearly complete; only explicit sibling differentiation is missing.

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?

Schema description coverage is 100%, so the baseline is 3. The description's mention of ?p= and refresh restates what the schema already documents ('?p= 可写单段或范围'; '跳过缓存重新取'), so it adds little parameter meaning beyond the schema.

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 opening lines describe the return shape (one group per video, one row per part, part number via page) and the trailing gloss '(danmaku count per part)' pins down the resource. The verb is implicit rather than stated up front, and it does not explicitly distinguish itself from the sibling get_comments (comments vs. danmaku). Clear enough for selection, but not a crisp verb+resource lead.

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?

It gives real operating guidance: omit ?p= to get all parts, use refresh for fresh data. However there is no explicit when-to-use/when-not framing and no routing to an alternative sibling (e.g. get_comments for actual comment text). Usage is implied rather than declared.

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

get_feedA
Read-only

B 站首页推荐流,每批最多 30 条。

(homepage feed, recommendations, browse)

ParametersJSON Schema
NameRequiredDescriptionDefault
jqYes必填的 jq 表达式。输入是全部条目组成的数组,每条字段:title,url,author,author_url,published_at,duration_sec,view_count,danmaku_count,like_count,rcmd_reason。体积大、多数任务用不到的字段:author_url(查看 UP 主时需要);特定任务需要时照常使用。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
feedYes
countYes
jq_countNo
elapsed_sNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one useful fact, the 30-item batch cap, but says nothing about pagination/refresh behavior or authentication, so it adds only modest context beyond the annotations.

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?

Two short clauses with the resource and the batch limit front-loaded, plus compact discovery keywords. Nothing is redundant or padded.

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?

With an output schema present and annotations covering the safety profile, the description needn't explain return values or read-only status. The only meaningful gap is that it never clarifies how the feed differs from the sibling search tools, which an agent might need to route correctly.

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?

Schema description coverage is 100% and the jq parameter is documented in exceptional detail (field list, size warnings, result formatting), so the schema carries the full burden. The description contributes nothing about parameters; baseline 3 applies.

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?

Names a concrete verb+resource: the Bilibili homepage recommendation feed, with a stated batch cap. It is clearly distinguishable from siblings like search_videos or list_up_videos, though it never states that distinction explicitly.

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 gloss '(browse)' implies a discovery use case, but there is no explicit when-to-use/when-not guidance and no routing to alternatives such as search_videos when the user wants a targeted result rather than passive browsing.

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

get_login_statusB
Read-only

联网向平台核验。

is_login 为 null 表示无法验证,与 false 不同。

(login status)

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
is_loginYes

TDQS

B3.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety/network profile is covered. The description still earns credit by disclosing a genuinely non-obvious behavioral detail: is_login can be null meaning 'unable to verify', which is distinct from false. That tri-state semantics is the kind of information structured fields do not convey.

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?

Very short and front-loaded, with the most decision-relevant fact (null ≠ false) surfaced early. The trailing '(login status)' is mildly redundant with the tool name but the text is otherwise waste-free.

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?

An output schema exists, so return values need not be explained, and the null-vs-false note covers the main ambiguity. However, for a tool sitting among four auth-related siblings, the absence of any usage context leaves a real gap in completeness.

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?

Schema description coverage is 100% for the single 'description' parameter, so the schema already carries the semantics (工具名:目的). The description adds nothing about the parameter, so the baseline 3 applies.

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

Purpose3/5

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

The description says it verifies online with the platform (联网向平台核验) and the trailing tag '(login status)' names the resource, so the intent is inferable but not stated as a clean verb+resource. It never distinguishes itself from siblings like start_qr_login, complete_qr_login, or logout, which is exactly where an agent would need disambiguation.

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?

There is no when-to-use guidance at all: nothing says whether this should be called before/after login flows or how it relates to start_qr_login / complete_qr_login. The agent must infer the calling context entirely from the tool name.

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

get_partsC
Read-only

即分 P,每个视频一组。单段视频返回一项。(video parts, pages)

ParametersJSON Schema
NameRequiredDescriptionDefault
jqYes必填的 jq 表达式。输入是单个视频的分段组成的数组,每条字段:page,part,duration。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
videosYes视频列表,每项为链接、b23.tv 短链或裸 BV/av 号。
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes
elapsed_sNo

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only the grouping behavior ('one group per video, one item for a single-segment video'), which is minor and partly duplicated by the output schema. No auth, rate-limit, or ordering behavior is disclosed.

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

Conciseness3/5

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

It is very short, but the telegraphic bilingual phrasing ('即分 P', '每个视频一组') and the parenthetical mash of Chinese and English gloss make it feel under-specified rather than tight. The key idea is front-loaded, but readability suffers.

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 requires three parameters, including an unusual 'description' field whose required format ('工具名:目的') and the mandatory jq expression are never explained in the description. With an output schema present, returns are covered, but the description leaves the agent without guidance on these non-obvious required inputs.

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?

Schema description coverage is 100%, so all three parameters (including the detailed jq expression semantics) are documented in the schema itself. The description adds no meaning beyond that, which meets the baseline 3 for fully documented schemas.

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

Purpose3/5

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

The gloss '(video parts, pages)' conveys that this retrieves a video's multi-part (分P) segments, grouping them per video. However, the phrasing is telegraphic with no clear verb, and it never states what the tool actually does in a sentence an agent can act on. It distinguishes it loosely from siblings like get_video_info, but only by inference.

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?

There is no statement of when to use this tool versus alternatives such as get_video_info or get_subtitles. The description merely describes the return shape ('one group per video'), leaving the agent to guess the selection context.

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

get_subtitlesC
Read-only

逐句返回。字幕可能为 AI 生成或机器翻译,存在误差。

(subtitles, captions, transcript)

ParametersJSON Schema
NameRequiredDescriptionDefault
jqYes必填的 jq 表达式。输入是全部条目组成的数组,每条字段:start,end,content。体积大、多数任务用不到的字段:start(需要定位时间时保留)、end;特定任务需要时照常使用。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
langNo轨道语种,如 zh-CN、en-US、ai-zh。不传则取平台给的第一条。可选值见返回的 available_langs。
pageNo分段序号,1 起。不传时取链接里的 ?p=N,两者都没有则第 1 段。单段视频忽略此项。
videoYes视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
langNo
countYes
jq_countNo
video_idYes
elapsed_sNo
subtitlesYes
available_langsNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds a real reliability caveat (subtitles may be AI-generated or machine-translated and contain errors) and states sentence-level granularity, but says nothing about auth needs, rate limits, or pagination behavior for a multi-page resource.

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?

Two short sentences plus a keyword line with no filler, and the return-granularity statement is front-loaded. The parenthetical keyword line is mildly redundant with the tool name but earns its place as a search/disambiguation aid.

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?

An output schema exists, so return values need not be re-explained, and the accuracy caveat covers the main quality risk. Still, for a 5-parameter tool with pagination and language selection, the absence of any when-to-use or alternative-routing content leaves a clear gap.

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?

Schema description coverage is 100% and the jq/lang/page/video parameters are documented in detail within the schema itself. The description contributes no additional parameter meaning, so the baseline 3 applies.

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

Purpose3/5

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

The bilingual keyword line "(subtitles, captions, transcript)" identifies the resource, and "逐句返回" indicates sentence-level return granularity. However, the opening line describes output shape rather than stating a verb+resource purpose, and it draws no distinction from siblings like get_danmaku_counts or get_parts.

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?

There is no guidance on when to use this tool versus alternatives, nor on prerequisites such as login state or which lang track to prefer (deferred entirely to the linked available_langs). The AI-generation/translation caveat is a data-quality note, not usage guidance.

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

get_up_infoC
Read-only

含昵称、签名、等级、粉丝数、关注数、总获赞、认证、大会员等。

(uploader profile, channel info, followers)

ParametersJSON Schema
NameRequiredDescriptionDefault
jqYes必填的 jq 表达式。输入是全部条目组成的数组,每条字段:input,mid,author,author_url,sign,sex,level,follower_count,following_count,like_count,official_type,official_title,vip,face_url,error。体积大、多数任务用不到的字段:author_url(给出空间链接时需要)、face_url;特定任务需要时照常使用。每个输入一条,取不到的只有 input 与 error 有值。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
authorsYesUP 主列表,每项为空间链接(其他工具返回的 author_url)或数字 mid。
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
failedYes
authorsYes
jq_countNo
elapsed_sNo

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds nothing behavioral beyond a restatement of returned fields — no note on per-input failure handling (the schema hints that only 'input' and 'error' are populated on failure), no mention that author_url may be omitted to reduce volume, and no error semantics context.

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

Conciseness3/5

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

It is short, which is good, but the content is a field enumeration that largely duplicates the output schema rather than front-loading what the tool does. The second line (the English parenthetical) is the only genuinely informative part, and it is relegated to the end.

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?

An output schema exists, so return values need not be explained — yet the description consists almost entirely of return values. What is missing is the operation itself: that it takes one or more UP masters (space URL or mid) and returns profile data, and why one would call it over sibling tools. For a 3-required-parameter tool, this is inadequate.

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?

Schema description coverage is 100%, so the schema already documents all three parameters (authors, jq, description) thoroughly. The description contributes no additional parameter meaning; baseline 3 applies when the schema carries the full load.

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

Purpose3/5

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

The name plus the parenthetical '(uploader profile, channel info, followers)' implies fetching uploader profile data, but there is no verb statement — the body is a list of returned fields (nickname, signature, level, follower count, etc.) rather than a description of the operation. No sibling differentiation is offered despite list_up_videos and get_video_info being close relatives. Purpose is inferable but vague.

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?

The description gives no indication of when to use this tool, what it requires (e.g., that it accepts a list of UP masters), or how it differs from list_up_videos or get_video_info. The agent must infer the context entirely from the name.

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

get_versionB
Read-only

本说明对应版本 0.13.0。running 与之不同表示工具说明是旧缓存:可把 0.13.0 传入 since 查看之后的用法变化。工具定义里没有的参数也可照传;工具列表里没有的工具需重连才能使用。running 低于 latest 表示服务未升级。latest 查不到时为 null。(server version)

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNo本说明的版本号。传入后返回之后的用法变化。
descriptionNo格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
latestYes
changesNo
runningYes

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuine context beyond that: running-vs-latest semantics, that 'latest' can be null when unresolvable, and that stale descriptions indicate a cache. This is useful behavioral disclosure that the annotations alone do not convey.

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 text is compact and each clause carries a distinct fact (version, cache detection, since usage, unknown-parameter tolerance, reconnect rule, null case). It is somewhat tangled and reads as concatenated notes rather than front-loaded prose, but there is little wasted wording.

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?

An output schema exists, so return values need not be explained. The description covers the operational semantics an agent needs: version comparison, cache staleness, the null case for 'latest', and the reconnect/unknown-param behaviors. It is reasonably complete for a low-complexity version 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?

Schema coverage is 100%, so the 'since' and 'description' parameters are fully documented in the schema itself. The description echoes the 'since' usage ('可把 0.13.0 传入 since') without adding syntax or format detail beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose3/5

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

The description never states a clean verb+resource like 'returns the server version'; instead it opens with '本说明对应版本 0.13.0' and discusses caching semantics. The trailing '(server version)' tag is the only direct signal of what the tool returns. Purpose is implied rather than stated, and it does not distinguish itself from the 15 sibling tools beyond the name.

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?

It offers implicit guidance — pass 0.13.0 into 'since' to see usage changes, and reconnect if a tool is missing from the list — which explains how the version signal should be acted on. However it gives no explicit when-to-use vs alternatives, and the advice is tangled up with caching mechanics rather than framed as usage scenarios.

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

get_video_infoB
Read-only

含标题、作者、发布时间、简介与各项统计。

统计口径:评论数含二级评论;弹幕数与整片时长是全部分段之和, 当前段时长只算这一段。单段视频忽略 ?p=,current_page 为空。 staff 仅联合投稿有值,格式为"名字(角色,mid)",以分号分隔。

(video info, metadata, stats)

ParametersJSON Schema
NameRequiredDescriptionDefault
jqYes必填的 jq 表达式。输入是全部条目组成的数组,每条字段:input,id,title,author,author_url,url,published_at,summary,staff,duration_sec,total_duration_sec,view_count,danmaku_count_total,comment_count,like_count,favorite_count,share_count,coin_count,cover_url,part_count,current_page,current_part,error。体积大、多数任务用不到的字段:author_url(查看 UP 主时需要)、cover_url;特定任务需要时照常使用。每个输入一条,取不到的只有 input 与 error 有值。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
videosYes视频列表,每项为链接、b23.tv 短链或裸 BV/av 号。分段写在项里,如 BV1xx?p=2,不写为第 1 段。
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
failedYes
videosYes
jq_countNo
elapsed_sNo

TDQS

B3.2/5.0
Behavior4/5

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

With readOnlyHint=true and openWorldHint=true already covering the safety profile, the description contributes genuinely useful semantics beyond the annotations: comment count includes secondary comments, danmaku count and total duration are sums across all segments while current-segment duration counts only one part, single-segment videos ignore ?p= and leave current_page empty, and staff is only populated for joint submissions with a documented 'name(role,mid)' format. No auth, rate-limit, or failure-mode detail is given, but the edge-case semantics are a real addition.

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 text is dense and free of filler, with the statistical caveats packed into a few clauses. Its only weakness is structural: it opens with a verbless fragment ('contains title, author...') instead of a front-loaded statement of purpose, so the reader must reconstruct the action from context.

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 batched, jq-driven tool with an output schema, the description correctly focuses on the tricky counting semantics and per-segment behavior rather than re-explaining return values. What remains missing is routing guidance toward overlapping siblings and any note on partial-failure behavior beyond what the jq schema already covers.

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?

Schema description coverage is 100%, so the jq, videos, and description parameters are already fully documented in the schema, making 3 the baseline. The description's note that single-segment videos ignore ?p= and that current_page is empty mildly reinforces the videos-parameter semantics, but adds no new syntax or format information beyond what the schema states.

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

Purpose3/5

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

The description enumerates the returned contents (title, author, publish time, summary, stats) rather than stating a verb+resource action; an agent must infer that this fetches metadata for one or more videos. The trailing keywords '(video info, metadata, stats)' reinforce the resource but do not distinguish it from siblings like get_parts or get_danmaku_counts, which cover overlapping 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?

There is no explicit when-to-use statement, no exclusions, and no routing to alternatives such as get_parts (segments) or get_danmaku_counts (danmaku). The statistical caveats hint at overlap with those siblings but never tell the agent which tool to pick.

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

list_up_videosB
Read-only

每批最多 40 条。total 是视频总数,带 keyword 时为匹配数。

(uploader videos, channel uploads, other videos by this author)

ParametersJSON Schema
NameRequiredDescriptionDefault
jqYes必填的 jq 表达式。输入是本批条目组成的数组,每条字段:title,url,published_at,duration_sec,view_count,danmaku_count,comment_count。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
orderNo排序。newest
cursorNo续取游标:不传从头开始,回传上次返回的 next_cursor 取下一批。
keywordNo按关键词筛选投稿,平台除标题外也会匹配简介等。
author_urlYesUP 主空间链接(其他工具返回的 author_url),或数字 mid。
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
totalYes
authorYes
videosYes
has_moreYes
jq_countNo
elapsed_sNo
author_urlYes
next_cursorNo

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already cover read-only and open-world behavior, so the description doesn't need to restate safety. It adds useful pagination behavior: max 40 items per batch, and total semantics where keyword changes total to the matching count. It still omits auth/rate-limit details, but the added pagination context is meaningful.

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 definition is very concise and every sentence carries useful information. Its structure could be better front-loaded, since the purpose appears in a trailing English parenthetical after pagination details, but there is no filler or repetition.

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?

An output schema exists and schema coverage is complete, so return values and most parameter details need not be described. Still, for a six-parameter list tool with several sibling listing/search tools, the description is minimally adequate and lacks clear routing guidance for when to choose it over alternatives.

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?

Schema description coverage is 100%, so the schema already documents all six parameters. The description adds output-related meaning for keyword ('total is matching count when keyword is present') but does not meaningfully extend parameter syntax or semantics beyond the schema.

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

Purpose3/5

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

The parenthetical names the resource scope ('uploader videos, channel uploads, other videos by this author'), and the batch/total text implies a listing operation. However, there is no explicit verb phrase such as 'List videos for a given author,' and it does not clearly differentiate itself from siblings like search_videos or get_up_info.

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 scope phrase implies this tool is for an author's uploads, giving an implicit use context. But it gives no explicit when-to-use guidance, prerequisites, or comparison to alternatives such as search_videos, get_feed, or get_up_info.

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

logoutB

删除本地保存的凭据。(log out, sign out)

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYes
messageYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already establish readOnlyHint=false and openWorldHint=false, so the mutating, non-open-world profile is covered. The description adds one genuinely useful behavioral detail beyond annotations — that the deletion targets *locally stored* credentials rather than server-side session state — but says nothing about reversibility or whether re-authentication is required.

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?

One short, front-loaded clause with no filler; the bilingual synonym in parentheses earns its place by improving retrieval match for 'log out'/'sign out'. Every token serves a purpose.

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?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. However, for a destructive local action the description omits the practical consequence (session invalidation, need to re-login), leaving a meaningful gap for an agent deciding whether to call it.

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?

There is a single parameter with 100% schema description coverage, so the schema already documents it ('格式为 工具名:目的。'). The description adds no parameter-level information, which is acceptable given the high coverage; baseline 3 applies.

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 a specific verb and resource ('删除本地保存的凭据' / delete locally saved credentials) and the parenthetical 'log out, sign out' reinforces intent. It is clearly distinguishable from the login siblings (start_qr_login, complete_qr_login, get_login_status), though it does not name any of them explicitly.

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?

There is no when-to-use or when-not-to-use guidance beyond the implied act of logging out. No alternatives (e.g. get_login_status to check state first) or prerequisites are mentioned, so the agent must infer all usage context.

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

search_videosA
Read-only

每批最多 30 条,最多翻 30 批。

结果已滤掉付费课程,一批可能不满 30 条。summary 是平台截断过的简介, 完整简介通过 get_video_info 获取。

(search videos, find video by keyword)

ParametersJSON Schema
NameRequiredDescriptionDefault
jqYes必填的 jq 表达式。输入是本批条目组成的数组,每条字段:title,url,author,author_url,published_at,duration_sec,category,tags,summary,view_count,danmaku_count,comment_count,like_count,favorite_count。体积大、多数任务用不到的字段:author_url(查看 UP 主时需要)、tags、summary;特定任务需要时照常使用。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
orderNo排序。relevance 是 B 站的综合排序,推荐用默认值,不推荐其他排序。relevance
cursorNo续取游标:不传从头开始,回传上次返回的 next_cursor 取下一批。
keywordYes搜索关键词。
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
resultsYes
has_moreYes
jq_countNo
elapsed_sNo
next_cursorNo

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the readOnly/openWorld annotations, it discloses real behavioral traits: a 30-item batch cap, a 30-batch total ceiling, paid courses being filtered out, and batches sometimes being short. These are non-obvious operational facts an agent could not infer from annotations or schema.

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

Conciseness3/5

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

The text is short with no filler, but it is not front-loaded: it opens with batch limits and truncation quirks before the purpose, which is buried in a trailing parenthetical. Purpose should lead, so structure is only adequate.

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?

An output schema exists, so return values need no explanation, and the description covers pagination, filtering, and the summary-truncation caveat. Combined with the rich schema, an agent has enough to call it correctly; only the sibling-routing gap keeps it from a 5.

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?

Schema description coverage is 100%, so the schema already documents all five parameters in detail, including the jq input fields and the order enum. The description adds only marginal parameter context (batch size, filtering) and does not explain syntax beyond the schema, so baseline 3 applies.

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 parenthetical 'search videos, find video by keyword' gives a clear verb+resource, and the body notes it filters out paid courses. It distinguishes itself from list_up_videos and get_feed implicitly, but never names those siblings, so it stops short of an explicit contrast.

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?

It routes the agent usefully: summary is truncated, so use get_video_info for the full description, and it explains pagination via batch limits and the cursor. There is no guidance on choosing this over suggest_keywords or get_feed, so it falls short of a 5.

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

start_qr_loginA
Read-only

返回内联二维码图片和对应的链接 url。不写入本地凭据,由 complete_qr_login 写入。

(QR code login)

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYes格式为 工具名:目的。

TDQS

A4.1/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, and the description adds important behavioral context: it does not write local credentials, whereas complete_qr_login does. It does not mention auth requirements or rate limits, but the core side-effect distinction is clearly disclosed.

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 short and front-loaded with the return value, then adds the credential-writing distinction. The English parenthetical '(QR code login)' is somewhat redundant, but the overall structure is efficient and wastes little space.

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 login-start tool with annotations covering safety and no output schema, the description adequately states what is returned and how it relates to complete_qr_login. It could say more about the login workflow sequence, but it is complete enough for correct invocation.

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?

There is one required parameter, and schema description coverage is 100%. The schema already explains the description parameter format, and the tool description adds no further meaning about that parameter, so the baseline of 3 is appropriate.

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 states a specific verb and resource: returns an inline QR code image and the corresponding link URL. It also distinguishes itself from the sibling complete_qr_login by explicitly saying credentials are not written locally and that complete_qr_login handles writing them.

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?

It gives clear workflow context by naming complete_qr_login as the credential-writing step, which implies this tool starts the QR login flow. It does not explicitly state when not to use this tool or list alternative login-status tools, but the context is sufficient for an agent to route correctly.

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

suggest_keywordsA
Read-only

B 站搜索框的联想词,最多 10 条。

平台联想时会忽略 + # 等符号。

(search suggestions, autocomplete, related keywords)

ParametersJSON Schema
NameRequiredDescriptionDefault
termYes已输入的关键词,可以只是开头几个字。
descriptionYes格式为 工具名:目的。

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
elapsed_sNo
suggestionsYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds real behavioral value beyond that: a hard cap of 10 results and the caveat that symbols like + and # are ignored during suggestion. It does not discuss rate limits or error behavior, but the added constraints are meaningful.

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?

Two short sentences plus a synonym tag; the core purpose is front-loaded and nothing is redundant. It is well-sized for a simple lookup tool.

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?

An output schema exists, so return-value explanation is unnecessary. The description covers purpose, result limit, and a notable input caveat. The main gap is the absence of routing guidance relative to sibling search/feed tools, but otherwise it is complete for this tool's complexity.

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?

Schema description coverage is 100%, so the schema already documents both 'term' and 'description'. The description adds no parameter-level detail (e.g., partial-word behavior or the odd '工具名:目的' format for description), so the baseline of 3 applies.

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 a specific resource and behavior: 'B站搜索框的联想词' (Bilibili search-box autocomplete), capped at 10 results. The parenthetical synonyms ('search suggestions, autocomplete, related keywords') reinforce the concept. It is distinguishable from the sibling search_videos, though it never names that sibling explicitly.

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?

There is no when-to-use or when-not-to-use guidance. The synonym list aids keyword matching but does not tell an agent when to pick this over search_videos or get_feed. No conditions, prerequisites, or alternatives are stated.

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.

  1. 18 tool updatesv0.12.1
    • Changedcomplete_qr_login2 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "key"
        -]New value: +[
        +  "description",
        +  "key"
        +]
    • Changedget_comment_replies9 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • changedInput schema / properties / pages / description
        Previous value: -"每条主评论取几页,每页 20 条。has_more 表示后面还有。"New value: +"每条主评论取几页,每页 20 条。has_more 表示后面还有。与主评论合计每分钟约取 30 页,取得多则耗时长,可以分几次取。"
      • addedInput schema / properties / refresh
        Added value: +{
        +  "default": false,
        +  "description": "跳过缓存重新取,并更新缓存。",
        +  "title": "Refresh",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / url
        Removed value: -{
        -  "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。",
        -  "title": "Url",
        -  "type": "string"
        -}
      • addedInput schema / properties / video
        Added value: +{
        +  "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。",
        +  "title": "Video",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "url",
        -  "comment_ids",
        -  "pages",
        -  "jq"
        -]New value: +[
        +  "description",
        +  "video",
        +  "comment_ids",
        +  "pages",
        +  "jq"
        +]
      • removedOutput schema / $defs / ReplyThreadItem / properties / cached_at
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Cached At"
        -}
      • addedOutput schema / properties / cached_at
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Cached At"
        +}
      • addedOutput schema / properties / from_cache
        Added value: +{
        +  "default": false,
        +  "title": "From Cache",
        +  "type": "boolean"
        +}
    • Changedget_comments10 fields changed
      • addedInput schema / properties / batch_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "mode=hot 时必填。自定的短字符串:其他参数相同时,同一个值返回同一批,换新值取下一批。重放结果与之前不同时,原批次已丢失,需要就从 cursor 为空重新开始。",
        +  "title": "Batch Id"
        +}
      • changedInput schema / properties / count / description
        Previous value: -"至少取多少条主评论。平台按每页约 20 条整页返回,实际条数约为 20 的整数倍;评论不够时返回剩余的全部。"New value: +"至少取多少条主评论。平台按每页约 20 条整页返回,实际条数可能多于 count;评论不够时返回剩余的全部。主评论与二级评论合计每分钟约取 30 页(约 600 条),取得多则耗时长,可以分几次取。"
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • changedInput schema / properties / jq / description
        Previous value: -"必填的 jq 表达式。输入是本批条目组成的数组,每条字段:id,author,author_url,author_level,is_up,ip_location,content,like_count,reply_count,parent_id,created_at,is_top,up_liked,image_urls,link_titles。体积大、多数任务用不到的字段:author_url(查看评论者资料时需要)、is_up、created_at、is_top、up_liked;特定任务需要时照常使用。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。hot 下若还要续取,不要用 jq 截取条数(如 .[:N]):续取从整批之后开始,截掉的评论取不回。"New value: +"必填的 jq 表达式。输入是本批条目组成的数组,每条字段:id,author,author_url,author_level,is_up,ip_location,content,like_count,reply_count,parent_id,created_at,is_top,up_liked,image_urls,link_titles。体积大、多数任务用不到的字段:author_url(查看评论者资料时需要)、is_up、created_at、is_top、up_liked;特定任务需要时照常使用。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。"
      • changedInput schema / properties / mode / description
        Previous value: -"排序方式:hot 是平台的综合排序。hot 的 cursor 只标识浏览会话,进度记在平台侧,同一 cursor 每次调用都返回下一批,不能重放某一批;同一视频同一时间只用一个 hot cursor:新开会话后,旧 cursor 只会返回已取过的内容,新旧混用时两者都会回退。newest 按时间倒序,cursor 含位置,可重复取同一批,不受新会话影响。需要完整抓取或断点续取时用 newest。newest 的结果缓存 30 分钟,cached_at 是缓存的抓取时间。"New value: +"排序方式:hot 是平台的综合排序。hot 的 cursor 只标识浏览会话,进度记在平台侧,翻页与重放靠 batch_id;同一视频同一时间只用一个 hot cursor:新开会话(包括其他对话里的)后,旧 cursor 会重复取过的内容或提前返回空,混用时新的也会回退;遇到时从 cursor 为空重新开始。newest 按时间倒序,cursor 含位置,可重复取同一批,不受新会话影响。需要完整抓取或断点续取时用 newest。缓存:除 jq 外参数相同的调用返回同一结果,from_cache 表示是否来自缓存;被限速的不完整结果不缓存。newest 要新数据用 refresh,hot 换 batch_id 取下一批。调用没收到结果时服务端仍会取完,之后用相同参数再取直接用缓存。"
      • addedInput schema / properties / refresh
        Added value: +{
        +  "default": false,
        +  "description": "跳过缓存重新取,并更新缓存。仅用于 newest。",
        +  "title": "Refresh",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / url
        Removed value: -{
        -  "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。",
        -  "title": "Url",
        -  "type": "string"
        -}
      • addedInput schema / properties / video
        Added value: +{
        +  "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。",
        +  "title": "Video",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "url",
        -  "count",
        -  "jq"
        -]New value: +[
        +  "description",
        +  "video",
        +  "count",
        +  "jq"
        +]
      • addedOutput schema / properties / from_cache
        Added value: +{
        +  "default": false,
        +  "title": "From Cache",
        +  "type": "boolean"
        +}
    • Removedget_danmaku
    • Addedget_danmaku_counts
    • Changedget_feed3 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • changedInput schema / properties / jq / description
        Previous value: -"必填的 jq 表达式。输入是全部条目组成的数组,每条字段:title,url,author,author_url,published_at,duration_sec,view_count,danmaku_count,like_count,rcmd_reason。体积大、多数任务用不到的字段:url(后续调用其他工具时需要)、author_url(查看 UP 主时需要);特定任务需要时照常使用。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。"New value: +"必填的 jq 表达式。输入是全部条目组成的数组,每条字段:title,url,author,author_url,published_at,duration_sec,view_count,danmaku_count,like_count,rcmd_reason。体积大、多数任务用不到的字段:author_url(查看 UP 主时需要);特定任务需要时照常使用。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。"
      • changedInput schema / required
        Previous value: -[
        -  "jq"
        -]New value: +[
        +  "description",
        +  "jq"
        +]
    • Removedget_frame
    • Changedget_login_status2 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "description"
        +]
    • Changedget_parts12 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • changedInput schema / properties / jq / description
        Previous value: -"必填的 jq 表达式。输入是全部条目组成的数组,每条字段:page,part,duration。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。"New value: +"必填的 jq 表达式。输入是单个视频的分段组成的数组,每条字段:page,part,duration。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。"
      • removedInput schema / properties / url
        Removed value: -{
        -  "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。",
        -  "title": "Url",
        -  "type": "string"
        -}
      • addedInput schema / properties / videos
        Added value: +{
        +  "description": "视频列表,每项为链接、b23.tv 短链或裸 BV/av 号。",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Videos",
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "url",
        -  "jq"
        -]New value: +[
        +  "description",
        +  "videos",
        +  "jq"
        +]
      • addedOutput schema / $defs
        Added value: +{
        +  "PartsItem": {
        +    "properties": {
        +      "count": {
        +        "default": 0,
        +        "title": "Count",
        +        "type": "integer"
        +      },
        +      "error": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "title": "Error"
        +      },
        +      "input": {
        +        "title": "Input",
        +        "type": "string"
        +      },
        +      "jq_count": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "title": "Jq Count"
        +      },
        +      "parts": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "title": "Parts"
        +      }
        +    },
        +    "required": [
        +      "input"
        +    ],
        +    "title": "PartsItem",
        +    "type": "object"
        +  }
        +}
      • removedOutput schema / properties / count
        Removed value: -{
        -  "title": "Count",
        -  "type": "integer"
        -}
      • removedOutput schema / properties / jq_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Jq Count"
        -}
      • removedOutput schema / properties / parts
        Removed value: -{
        -  "title": "Parts",
        -  "type": "string"
        -}
      • addedOutput schema / properties / results
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/PartsItem"
        +  },
        +  "title": "Results",
        +  "type": "array"
        +}
      • removedOutput schema / properties / video_id
        Removed value: -{
        -  "title": "Video Id",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "video_id",
        -  "count",
        -  "parts"
        -]New value: +[
        +  "results"
        +]
    • Changedget_subtitles4 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • removedInput schema / properties / url
        Removed value: -{
        -  "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。",
        -  "title": "Url",
        -  "type": "string"
        -}
      • addedInput schema / properties / video
        Added value: +{
        +  "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。",
        +  "title": "Video",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "url",
        -  "jq"
        -]New value: +[
        +  "description",
        +  "video",
        +  "jq"
        +]
    • Changedget_up_info23 fields changed
      • removedInput schema / properties / author_url
        Removed value: -{
        -  "description": "UP 主空间链接(其他工具返回的 author_url),或数字 mid。",
        -  "title": "Author Url",
        -  "type": "string"
        -}
      • addedInput schema / properties / authors
        Added value: +{
        +  "description": "UP 主列表,每项为空间链接(其他工具返回的 author_url)或数字 mid。",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Authors",
        +  "type": "array"
        +}
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • addedInput schema / properties / jq
        Added value: +{
        +  "description": "必填的 jq 表达式。输入是全部条目组成的数组,每条字段:input,mid,author,author_url,sign,sex,level,follower_count,following_count,like_count,official_type,official_title,vip,face_url,error。体积大、多数任务用不到的字段:author_url(给出空间链接时需要)、face_url;特定任务需要时照常使用。每个输入一条,取不到的只有 input 与 error 有值。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。",
        +  "title": "Jq",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "author_url"
        -]New value: +[
        +  "description",
        +  "authors",
        +  "jq"
        +]
      • removedOutput schema / properties / author
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Author"
        -}
      • removedOutput schema / properties / author_url
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Author Url"
        -}
      • addedOutput schema / properties / authors
        Added value: +{
        +  "title": "Authors",
        +  "type": "string"
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "title": "Count",
        +  "type": "integer"
        +}
      • removedOutput schema / properties / face_url
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Face Url"
        -}
      • addedOutput schema / properties / failed
        Added value: +{
        +  "title": "Failed",
        +  "type": "integer"
        +}
      • removedOutput schema / properties / follower_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Follower Count"
        -}
      • removedOutput schema / properties / following_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Following Count"
        -}
      • addedOutput schema / properties / jq_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Jq Count"
        +}
      • removedOutput schema / properties / level
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Level"
        -}
      • removedOutput schema / properties / like_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Like Count"
        -}
      • removedOutput schema / properties / mid
        Removed value: -{
        -  "title": "Mid",
        -  "type": "integer"
        -}
      • removedOutput schema / properties / official_title
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Official Title"
        -}
      • removedOutput schema / properties / official_type
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Official Type"
        -}
      • removedOutput schema / properties / sex
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Sex"
        -}
      • removedOutput schema / properties / sign
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Sign"
        -}
      • removedOutput schema / properties / vip
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Vip"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "mid"
        -]New value: +[
        +  "count",
        +  "failed",
        +  "authors"
        +]
    • Addedget_version
    • Changedget_video_info35 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • addedInput schema / properties / jq
        Added value: +{
        +  "description": "必填的 jq 表达式。输入是全部条目组成的数组,每条字段:input,id,title,author,author_url,url,published_at,summary,staff,duration_sec,total_duration_sec,view_count,danmaku_count_total,comment_count,like_count,favorite_count,share_count,coin_count,cover_url,part_count,current_page,current_part,error。体积大、多数任务用不到的字段:author_url(查看 UP 主时需要)、cover_url;特定任务需要时照常使用。每个输入一条,取不到的只有 input 与 error 有值。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。",
        +  "title": "Jq",
        +  "type": "string"
        +}
      • removedInput schema / properties / page
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "分段序号,1 起。不传时取链接里的 ?p=N,两者都没有则第 1 段。单段视频忽略此项。",
        -  "title": "Page"
        -}
      • removedInput schema / properties / url
        Removed value: -{
        -  "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。",
        -  "title": "Url",
        -  "type": "string"
        -}
      • addedInput schema / properties / videos
        Added value: +{
        +  "description": "视频列表,每项为链接、b23.tv 短链或裸 BV/av 号。分段写在项里,如 BV1xx?p=2,不写为第 1 段。",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Videos",
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "url"
        -]New value: +[
        +  "description",
        +  "videos",
        +  "jq"
        +]
      • removedOutput schema / $defs
        Removed value: -{
        -  "StaffMember": {
        -    "properties": {
        -      "author_url": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Author Url"
        -      },
        -      "name": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Name"
        -      },
        -      "role": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Role"
        -      }
        -    },
        -    "title": "StaffMember",
        -    "type": "object"
        -  }
        -}
      • removedOutput schema / properties / author
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Author"
        -}
      • removedOutput schema / properties / author_url
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Author Url"
        -}
      • removedOutput schema / properties / category_id
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Category Id"
        -}
      • removedOutput schema / properties / coin_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Coin Count"
        -}
      • removedOutput schema / properties / comment_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Comment Count"
        -}
      • removedOutput schema / properties / copyright
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Copyright"
        -}
      • addedOutput schema / properties / count
        Added value: +{
        +  "title": "Count",
        +  "type": "integer"
        +}
      • removedOutput schema / properties / cover_url
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Cover Url"
        -}
      • removedOutput schema / properties / current_page
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Current Page"
        -}
      • removedOutput schema / properties / current_part
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Current Part"
        -}
      • removedOutput schema / properties / danmaku_count_total
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Danmaku Count Total"
        -}
      • removedOutput schema / properties / duration_sec
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Duration Sec"
        -}
      • addedOutput schema / properties / failed
        Added value: +{
        +  "title": "Failed",
        +  "type": "integer"
        +}
      • removedOutput schema / properties / favorite_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Favorite Count"
        -}
      • removedOutput schema / properties / id
        Removed value: -{
        -  "title": "Id",
        -  "type": "string"
        -}
      • addedOutput schema / properties / jq_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Jq Count"
        +}
      • removedOutput schema / properties / like_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Like Count"
        -}
      • removedOutput schema / properties / part_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Part Count"
        -}
      • removedOutput schema / properties / published_at
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Published At"
        -}
      • removedOutput schema / properties / share_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Share Count"
        -}
      • removedOutput schema / properties / staff
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "$ref": "#/$defs/StaffMember"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Staff"
        -}
      • removedOutput schema / properties / summary
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Summary"
        -}
      • removedOutput schema / properties / title
        Removed value: -{
        -  "title": "Title",
        -  "type": "string"
        -}
      • removedOutput schema / properties / total_duration_sec
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Total Duration Sec"
        -}
      • removedOutput schema / properties / url
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Url"
        -}
      • addedOutput schema / properties / videos
        Added value: +{
        +  "title": "Videos",
        +  "type": "string"
        +}
      • removedOutput schema / properties / view_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "View Count"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "title"
        -]New value: +[
        +  "count",
        +  "failed",
        +  "videos"
        +]
    • Changedlist_up_videos3 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • changedInput schema / properties / jq / description
        Previous value: -"必填的 jq 表达式。输入是本批条目组成的数组,每条字段:title,url,published_at,duration_sec,view_count,danmaku_count,comment_count。体积大、多数任务用不到的字段:url(后续调用其他工具时需要);特定任务需要时照常使用。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。"New value: +"必填的 jq 表达式。输入是本批条目组成的数组,每条字段:title,url,published_at,duration_sec,view_count,danmaku_count,comment_count。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。"
      • changedInput schema / required
        Previous value: -[
        -  "author_url",
        -  "jq"
        -]New value: +[
        +  "description",
        +  "author_url",
        +  "jq"
        +]
    • Changedlogout2 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "description"
        +]
    • Changedsearch_videos6 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • changedInput schema / properties / jq / description
        Previous value: -"必填的 jq 表达式。输入是本批条目组成的数组,每条字段:title,url,author,author_url,published_at,duration_sec,category,tags,summary,view_count,danmaku_count,comment_count,like_count,favorite_count。体积大、多数任务用不到的字段:url(后续调用其他工具时需要)、author_url(查看 UP 主时需要)、tags、summary;特定任务需要时照常使用。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。"New value: +"必填的 jq 表达式。输入是本批条目组成的数组,每条字段:title,url,author,author_url,published_at,duration_sec,category,tags,summary,view_count,danmaku_count,comment_count,like_count,favorite_count。体积大、多数任务用不到的字段:author_url(查看 UP 主时需要)、tags、summary;特定任务需要时照常使用。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。"
      • addedInput schema / properties / keyword
        Added value: +{
        +  "description": "搜索关键词。",
        +  "title": "Keyword",
        +  "type": "string"
        +}
      • changedInput schema / properties / order / description
        Previous value: -"排序。relevance 是 B 站的综合排序。"New value: +"排序。relevance 是 B 站的综合排序,推荐用默认值,不推荐其他排序。"
      • removedInput schema / properties / query
        Removed value: -{
        -  "description": "搜索关键词。",
        -  "title": "Query",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "query",
        -  "jq"
        -]New value: +[
        +  "description",
        +  "keyword",
        +  "jq"
        +]
    • Changedstart_qr_login2 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "description"
        +]
    • Changedsuggest_keywords2 fields changed
      • addedInput schema / properties / description
        Added value: +{
        +  "description": "格式为 工具名:目的。",
        +  "title": "Description",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "term"
        -]New value: +[
        +  "description",
        +  "term"
        +]
  2. 9 tool updatesv0.3.1
    • Changedget_comment_replies9 fields changed
      • addedInput schema / properties / jq
        Added value: +{
        +  "description": "必填的 jq 表达式。输入是单条主评论下的二级评论组成的数组,每条字段:id,author,author_url,author_level,is_up,ip_location,content,like_count,parent_id,created_at,is_top,up_liked,image_urls,link_titles。体积大、多数任务用不到的字段:author_url(查看评论者资料时需要)、is_up、created_at、is_top、up_liked;特定任务需要时照常使用。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。",
        +  "title": "Jq",
        +  "type": "string"
        +}
      • removedInput schema / properties / limit
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "每个楼只取最早的多少条回复,has_more 表示被截断。不传则取完整个楼。",
        -  "title": "Limit"
        -}
      • addedInput schema / properties / pages
        Added value: +{
        +  "description": "每条主评论取几页,每页 20 条。has_more 表示后面还有。",
        +  "title": "Pages",
        +  "type": "integer"
        +}
      • addedInput schema / properties / start_page
        Added value: +{
        +  "default": 1,
        +  "description": "每条主评论从第几页开始,1 起。",
        +  "title": "Start Page",
        +  "type": "integer"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "url",
        -  "comment_ids"
        -]New value: +[
        +  "url",
        +  "comment_ids",
        +  "pages",
        +  "jq"
        +]
      • addedOutput schema / $defs / ReplyThreadItem / properties / cached_at
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Cached At"
        +}
      • addedOutput schema / $defs / ReplyThreadItem / properties / error
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Error"
        +}
      • addedOutput schema / $defs / ReplyThreadItem / properties / jq_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Jq Count"
        +}
      • addedOutput schema / $defs / ReplyThreadItem / properties / total
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Total"
        +}
    • Changedget_comments7 fields changed
      • changedInput schema / properties / count / description
        Previous value: -"想要的主评论条数,实际返回可能多于或少于这个数。"New value: +"至少取多少条主评论。平台按每页约 20 条整页返回,实际条数约为 20 的整数倍;评论不够时返回剩余的全部。"
      • addedInput schema / properties / jq
        Added value: +{
        +  "description": "必填的 jq 表达式。输入是本批条目组成的数组,每条字段:id,author,author_url,author_level,is_up,ip_location,content,like_count,reply_count,parent_id,created_at,is_top,up_liked,image_urls,link_titles。体积大、多数任务用不到的字段:author_url(查看评论者资料时需要)、is_up、created_at、is_top、up_liked;特定任务需要时照常使用。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。hot 下若还要续取,不要用 jq 截取条数(如 .[:N]):续取从整批之后开始,截掉的评论取不回。",
        +  "title": "Jq",
        +  "type": "string"
        +}
      • changedInput schema / properties / mode / description
        Previous value: -"排序方式:hot 是平台的综合排序。hot 的游标绑在一次翻页过程上,中断后无法从原处接续,重复用同一个游标会继续往后走;newest 的游标是位置标识,可以重复取到同一批。"New value: +"排序方式:hot 是平台的综合排序。hot 的 cursor 只标识浏览会话,进度记在平台侧,同一 cursor 每次调用都返回下一批,不能重放某一批;同一视频同一时间只用一个 hot cursor:新开会话后,旧 cursor 只会返回已取过的内容,新旧混用时两者都会回退。newest 按时间倒序,cursor 含位置,可重复取同一批,不受新会话影响。需要完整抓取或断点续取时用 newest。newest 的结果缓存 30 分钟,cached_at 是缓存的抓取时间。"
      • changedInput schema / required
        Previous value: -[
        -  "url",
        -  "count"
        -]New value: +[
        +  "url",
        +  "count",
        +  "jq"
        +]
      • addedOutput schema / properties / cached_at
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Cached At"
        +}
      • addedOutput schema / properties / jq_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Jq Count"
        +}
      • addedOutput schema / properties / message
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Message"
        +}
    • Changedget_danmaku4 fields changed
      • changedInput schema / properties / count / description
        Previous value: -"想要的弹幕条数。取该段里 heat 最高的这么多条,结果仍按时间轴排序;达到或超过该段弹幕总数即返回全部。heat 是平台给每条弹幕的标记,约 1-10 的档位,同档内不再细分。"New value: +"取多少条弹幕。取该段里 heat 最高的这么多条,结果仍按时间轴排序;达到或超过平台给出的条数即全部返回。heat 是平台给每条弹幕的标记,约 1-10 的档位,同档内不再细分。"
      • addedInput schema / properties / jq
        Added value: +{
        +  "description": "必填的 jq 表达式。输入是按 count 选出的弹幕组成的数组,每条字段:content,timestamp,heat。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。",
        +  "title": "Jq",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "url",
        -  "count"
        -]New value: +[
        +  "url",
        +  "count",
        +  "jq"
        +]
      • addedOutput schema / properties / jq_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Jq Count"
        +}
    • Changedget_feed3 fields changed
      • addedInput schema / properties / jq
        Added value: +{
        +  "description": "必填的 jq 表达式。输入是全部条目组成的数组,每条字段:title,url,author,author_url,published_at,duration_sec,view_count,danmaku_count,like_count,rcmd_reason。体积大、多数任务用不到的字段:url(后续调用其他工具时需要)、author_url(查看 UP 主时需要);特定任务需要时照常使用。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。",
        +  "title": "Jq",
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "jq"
        +]
      • addedOutput schema / properties / jq_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Jq Count"
        +}
    • Changedget_parts3 fields changed
      • addedInput schema / properties / jq
        Added value: +{
        +  "description": "必填的 jq 表达式。输入是全部条目组成的数组,每条字段:page,part,duration。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。",
        +  "title": "Jq",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "url"
        -]New value: +[
        +  "url",
        +  "jq"
        +]
      • addedOutput schema / properties / jq_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Jq Count"
        +}
    • Changedget_subtitles3 fields changed
      • addedInput schema / properties / jq
        Added value: +{
        +  "description": "必填的 jq 表达式。输入是全部条目组成的数组,每条字段:start,end,content。体积大、多数任务用不到的字段:start(需要定位时间时保留)、end;特定任务需要时照常使用。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。",
        +  "title": "Jq",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "url"
        -]New value: +[
        +  "url",
        +  "jq"
        +]
      • addedOutput schema / properties / jq_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Jq Count"
        +}
    • Changedget_up_info2 fields changed
      • removedOutput schema / properties / article_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Article Count"
        -}
      • removedOutput schema / properties / video_count
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Video Count"
        -}
    • Changedlist_up_videos3 fields changed
      • addedInput schema / properties / jq
        Added value: +{
        +  "description": "必填的 jq 表达式。输入是本批条目组成的数组,每条字段:title,url,published_at,duration_sec,view_count,danmaku_count,comment_count。体积大、多数任务用不到的字段:url(后续调用其他工具时需要);特定任务需要时照常使用。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。",
        +  "title": "Jq",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "author_url"
        -]New value: +[
        +  "author_url",
        +  "jq"
        +]
      • addedOutput schema / properties / jq_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Jq Count"
        +}
    • Changedsearch_videos3 fields changed
      • addedInput schema / properties / jq
        Added value: +{
        +  "description": "必填的 jq 表达式。输入是本批条目组成的数组,每条字段:title,url,author,author_url,published_at,duration_sec,category,tags,summary,view_count,danmaku_count,comment_count,like_count,favorite_count。体积大、多数任务用不到的字段:url(后续调用其他工具时需要)、author_url(查看 UP 主时需要)、tags、summary;特定任务需要时照常使用。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。",
        +  "title": "Jq",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "query"
        -]New value: +[
        +  "query",
        +  "jq"
        +]
      • addedOutput schema / properties / jq_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Jq Count"
        +}
  3. 16 tool updatesv0.1.0
    • First observedcomplete_qr_login
    • First observedget_comment_replies
    • First observedget_comments
    • First observedget_danmaku
    • First observedget_feed
    • First observedget_frame
    • First observedget_login_status
    • First observedget_parts
    • First observedget_subtitles
    • First observedget_up_info
    • First observedget_video_info
    • First observedlist_up_videos
    • First observedlogout
    • First observedsearch_videos
    • First observedstart_qr_login
    • First observedsuggest_keywords

TDQS

B3.4/5.0

Scored across 16 tools

Disambiguation5/5

Each tool targets a distinct resource or action: search/discovery (suggest_keywords, search_videos, get_feed, list_up_videos), video facets (info, parts, subtitles, danmaku counts), comments (top-level vs replies), user profile, and a clean login lifecycle. The descriptions clarify boundaries (e.g. suggest_keywords is autocomplete, search_videos does actual search), so an agent should select correctly.

Naming Consistency5/5

All names are snake_case and verb-first (get_, list_, search_, suggest_, start_, complete_), with only the natural exception of logout. The pattern is predictable and readable throughout.

Tool Count4/5

16 tools is slightly above the ideal 3-15 band but justified by the broad domain (search, video metadata, comments, replies, subtitles, parts, danmaku, user, feed, login). No obvious filler tools; each has a role.

Completeness3/5

Core read paths (search, video info, comments/replies, subtitles, parts, danmaku counts, user, feed, login) are covered, but notable gaps exist: no danmaku content retrieval despite counts, no write actions (post comment), no account-specific reads (favorites/history/following), and no video stream URL. These will cause dead ends for agents expecting a full Bilibili client.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    An MCP server that enables users to search Bilibili videos, access trending rankings, and retrieve detailed information about videos, content creators, and anime schedules. It allows AI applications to interact directly with Bilibili content via simple API interfaces.
    32 npm
    194
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Bilibili MCP server enabling video search, comment management, danmaku, user info, dynamics, live streaming analysis, and more via 31 tools.
    31
    3,672 npm
    4
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server for interacting with Bilibili, enabling AI assistants to search videos, fetch comments and subtitles, publish content, and manage interactions. It also adds private message reading, stable TV login, and an automated comment workflow requiring human confirmation.
    MIT