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

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

get_parts

分 P 清单

get_danmaku

弹幕,按热度取一批,按时间轴返回

get_comments

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

get_comment_replies

某条主评论下的二级评论

get_subtitles

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

get_frame

截取指定时刻的一帧画面

start_qr_login · complete_qr_login

扫码登录

get_login_status · logout

查询登录状态、退出登录

get_version

运行中的版本与 PyPI 最新版本,用于判断工具说明是否为旧缓存、服务是否需要升级

Related MCP server: Bilibili MCP Server

登录

get_comments、get_comment_replies、get_subtitles、get_frame、list_up_videos 需要登录。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_parts、get_comments、get_comment_replies、get_danmaku、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 会自动下载;get_frame 另需 ffmpeg。

接入 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

无

否

关闭鉴权,仅限本机调试

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

评论与弹幕限速

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

  • 评论每分钟最多 30 页,弹幕每分钟最多 10 个分P,超出时排队等待。

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

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

免责声明与许可证

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

以 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。

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
messageYes

TDQS

C2.8/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, and the description is consistent with that – it says credentials are retrieved and written locally, confirming a local write side effect. It adds that the call polls QR status, but does not clarify whether it blocks/loops until success, how long it waits, or what credentials are stored where.

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 description is short and front-loads the core action, but the two fragments (Chinese action phrase and English parenthetical) partially overlap and partly conflict, so it is compact without being cleanly structured.

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 described, and the single parameter is fully covered. The remaining gap is behavioral: the polling/blocking nature of the completion and the relationship to the start_qr_login/get_login_status pair are not fully clarified, leaving a simple auth flow tool only minimally specified.

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 single key parameter is fully documented in the schema itself. The description adds no meaning about the key beyond what the schema already states, so the baseline 3 is appropriate.

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 conveys a verb+resource combination ('取回凭据并写入本地' – retrieve credentials and write locally) tied to finishing a login flow, which separates it from start_qr_login. However, the parenthetical '(finish QR code login, poll QR status)' mixes completion and polling semantics, muddying whether this tool finishes the login or merely checks status – the latter being the job of get_login_status.

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?

Usage is only implied indirectly through the parameter description ('the key returned by start_qr_login'), and even that lives in the schema, not the description. There is no explicit statement of when to call this versus start_qr_login or get_login_status, and no exclusion or prerequisite guidance.

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 指向的二级评论不在列表里时,那条被平台隐藏了,取不到。 结果缓存 30 分钟,cached_at 是缓存的抓取时间。 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 是其长度。
urlYes视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。
pagesYes每条主评论取几页,每页 20 条。has_more 表示后面还有。
start_pageNo每条主评论从第几页开始,1 起。
comment_idsYes主评论 id 列表,从 get_comments 返回的 comments 表里取。

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes
video_idYes
elapsed_sNo

TDQS

A4/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint/openWorldHint annotations: it discloses 30-minute result caching with cached_at, partial-return semantics when throttled or risk-controlled, per-comment error isolation, withheld/deleted reply counts, and how parent_id indicates the reply target. That is exactly the operational context an agent needs before calling.

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 content is useful but unstructured: it opens with an ordering property and a login note rather than the tool's action, then runs through output-field explanations and failure modes as a flat block. Given an output schema exists, several of these sentences are redundant padding, and the length is not front-loaded around the primary purpose.

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 read-only, 5-parameter, paginated call it covers login requirement, pagination via pages/has_more, error and throttling behavior, and caching freshness. Minor omissions remain (no guidance on how many comment_ids are sensible per call, no explicit rate-limit ceiling), but nothing essential for correct invocation 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 url, pages, start_page, jq and comment_ids are already documented in the schema; the description adds little parameter-level meaning beyond what is there. Most of its prose concerns returned fields (total, withheld, parent_id, image_urls, link_titles), not inputs. 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 identifies a specific resource and scope – second-level replies under a given main comment, returned in ascending time order – and the trailing '(comment replies, sub-replies, thread)' keywords reinforce it. It also ties itself to the sibling get_comments by stating comment_ids are taken from get_comments' comments table. It never states the core action in a single upfront verb+object sentence, so it is clear but not maximally crisp.

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?

Prerequisites are given ('需要登录', comment_ids sourced from get_comments), which implicitly lays out the workflow. It also explains the degraded cases – per-comment errors, partial results under rate limiting. It does not explicitly say when not to use it or name a competing tool, but no sibling overlaps this purpose.

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 是其长度。hot 下若还要续取,不要用 jq 截取条数(如 .[:N]):续取从整批之后开始,截掉的评论取不回。
urlYes视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。
modeNo排序方式:hot 是平台的综合排序。hot 的 cursor 只标识浏览会话,进度记在平台侧,同一 cursor 每次调用都返回下一批,不能重放某一批;同一视频同一时间只用一个 hot cursor:新开会话后,旧 cursor 只会返回已取过的内容,新旧混用时两者都会回退。newest 按时间倒序,cursor 含位置,可重复取同一批,不受新会话影响。需要完整抓取或断点续取时用 newest。newest 的结果缓存 30 分钟,cached_at 是缓存的抓取时间。hot
countYes至少取多少条主评论。平台按每页约 20 条整页返回,实际条数约为 20 的整数倍;评论不够时返回剩余的全部。
cursorNo续取游标:不传从头开始,回传上次返回的 next_cursor 取下一批。

Output Schema

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

TDQS

A4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint and openWorldHint, so the added '需要登录' (login required) is genuine behavioral context beyond structured data. It also discloses output-shape quirks (image_urls/link_titles newline-joined), though it says nothing about rate limits or caching.

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?

Three short lines, front-loaded with the scoping constraint and login requirement, then the formatting caveat. No filler or repetition of schema content.

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?

Given an output schema exists and the input schema is fully documented, the description supplies the missing pieces an agent needs: login requirement, reply exclusion, and field formatting. The only gap is that mode/cursor usage strategy lives entirely in the schema rather than the top-level description.

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 carries the heavy parameter burden (mode/cursor semantics, count pagination behavior, jq contract). The description adds only a small formatting note about image_urls and link_titles, which nudges it to the baseline of 3 rather than above.

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 explicitly scopes it by excluding secondary comments, naming the sibling get_comment_replies that handles those. It lacks an explicit verb like 'list'/'fetch', but the resource and boundary are unambiguous enough to distinguish it from siblings.

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 explicitly routes reply-fetching to get_comment_replies and states the login prerequisite. It does not cover the hot-vs-newest choice or when to use this versus search_videos/get_feed, but the primary sibling disambiguation is present.

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

get_danmakuC
Read-only

timestamp 是弹幕在视频中的秒数。

平台可能只给出部分弹幕,少于视频信息里的弹幕数。

(danmaku, bullet comments)

ParametersJSON Schema
NameRequiredDescriptionDefault
jqYes必填的 jq 表达式。输入是按 count 选出的弹幕组成的数组,每条字段:content,timestamp,heat。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
urlYes视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。
pageNo分段序号,1 起。不传时取链接里的 ?p=N,两者都没有则第 1 段。单段视频忽略此项。
countYes取多少条弹幕。取该段里 heat 最高的这么多条,结果仍按时间轴排序;达到或超过平台给出的条数即全部返回。heat 是平台给每条弹幕的标记,约 1-10 的档位,同档内不再细分。

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
danmakuYes
jq_countNo
video_idYes
elapsed_sNo

TDQS

C2.8/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 that the platform may return only partial danmaku, fewer than video info indicates, which is useful data-completeness context. However it omits auth, rate-limit, and return-format details, making 3 appropriate against the lower bar set by annotations.

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 description is very brief and every sentence is relevant, but it is not front-loaded: it opens with a field note rather than what the tool does. The parenthetical translation feels like an afterthought. There is no bloated text, but the structure does not prioritize selection-relevant information.

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?

Output schema exists and annotations cover read-only/open-world behavior, so return values and safety need not be explained. The remaining gap is purpose and when-to-use guidance, especially versus get_comments, which makes it only minimally complete for a tool with four parameters and three required fields.

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 input parameters are fully documented in the schema. The description's timestamp note likely refers to an output field, and its partial-danmaku caveat only reinforces the count parameter saturation already described in schema. Baseline 3 is correct 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 explicitly states that the tool retrieves danmaku/bullet comments; it only explains that timestamp is seconds and notes partial data. The parenthetical '(danmaku, bullet comments)' identifies the resource, but without a verb or clear purpose statement the agent must infer the action from the tool name. It also does not differentiate from siblings like get_comments.

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, no alternatives, and no conditions for selecting this tool over get_comments or others. The only context given is a caveat about partial data, which does not help an agent decide when to call it.

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

get_feedB
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。体积大、多数任务用不到的字段:url(后续调用其他工具时需要)、author_url(查看 UP 主时需要);特定任务需要时照常使用。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。

Output Schema

ParametersJSON Schema
NameRequiredDescription
feedYes
countYes
jq_countNo
elapsed_sNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered; the description's added value is the 'max 30 per batch' volume constraint. It does not say whether the feed is personalized, whether results refresh between calls, or what pagination behavior exists, so it is only a modest addition over 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?

One short sentence in Chinese plus a keyword line; the resource and its volume limit are front-loaded with zero filler. Every element earns its place.

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?

With an output schema present, return values need no explanation, and the input schema fully documents jq. What is missing is routing context: how this feed relates to keyword search or per-UP listing, and whether the 30-item cap can be extended. Adequate but with a real usage 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% — the jq parameter is documented at length in the schema itself (input array, per-item fields, return-encoding rules, jq_count). 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.

Purpose4/5

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

States a specific resource and verb-equivalent: the Bilibili homepage recommendation feed, with an explicit batch cap of 30 items. That is enough to distinguish it from search_videos, get_video_info or list_up_videos, though it never names those siblings as alternatives.

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

Usage Guidelines2/5

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

The parenthetical keywords (homepage feed, recommendations, browse) hint at the browse use case but give no when-to-use/when-not guidance. Nothing tells the agent to prefer this over search_videos or list_up_videos for discovery.

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

get_frameA
Read-only

返回内联 JPEG 图片。需要登录。

(video frame, screenshot)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。
pageNo分段序号,1 起。不传时取链接里的 ?p=N,两者都没有则第 1 段。单段视频忽略此项。
timestampYes视频内秒数,如 10.5。

TDQS

A3.6/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 two pieces of behavioral context beyond that: the authentication requirement and the return form (an inline JPEG rather than a URL or metadata). It stops short of noting errors for out-of-range timestamps or download behavior, so it isn't fully transparent.

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 clauses with no filler, and the output format leads ahead of the auth requirement. The only weakness is that brevity shades into under-specification rather than pure efficiency.

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

Completeness3/5

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

For a simple three-parameter tool with full schema coverage and no output schema, the description covers auth and return format, which is the minimum an agent needs. However, it says nothing about failure modes (invalid link, timestamp beyond video length) or whether the frame is fetched remotely, which would be valuable for an openWorld read.

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 url, page, and timestamp thoroughly, including defaults and edge cases. The description adds no parameter detail whatsoever, so the 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 the output ('returns an inline JPEG image') and the keyword tags '(video frame, screenshot)' combined with the name get_frame make the function clear: fetch a still frame from a video. It doesn't explicitly say it extracts the frame at a given timestamp, but the schema fills that in, and no sibling competes for the same purpose.

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?

'Login required' is a useful precondition for invoking the tool, but there is no guidance on when to choose this over siblings like get_video_info or get_subtitles. Usage is only implied by the tool's name and the required timestamp parameter.

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

get_login_statusA
Read-only

联网向平台核验。

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

(login status)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
is_loginYes

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 and external-network profile is covered. The description adds value beyond them by disclosing the tri-state result ambiguity — null means verification was impossible, which is materially different from a definitive false — a failure mode callers must handle specially.

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: the action comes first, the important result caveat second. The trailing parenthetical '(login status)' merely restates the tool name and is the one piece of filler.

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?

With no parameters and an output schema already documenting return fields, little is strictly required. But for a tool inside an authentication flow, the description gives no sense of its place relative to start_qr_login, complete_qr_login, or logout, leaving the agent to guess the sequencing.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. There is nothing for the description to disambiguate on the input side, and it does not waste words inventing any.

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 verb+resource pairing is present: it says it verifies login state against the platform over the network, and the is_login note confirms it returns a login status. However, it never distinguishes itself from the closely related siblings start_qr_login, complete_qr_login, and logout, so an agent must infer where this check sits in the login flow.

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. It does not say to call this before start_qr_login, after complete_qr_login, or to confirm state after logout — the exact routing decision the sibling set demands. The null caveat is about interpreting a result, not about choosing this tool.

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 是其长度。
urlYes视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
partsYes
jq_countNo
video_idYes
elapsed_sNo

TDQS

C2.8/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 safety and scope are covered. The description adds one genuine behavioral fact beyond that, namely that a single-segment video yields a single item, which helps set expectations about result cardinality. It stops there, disclosing nothing about rate limits, auth needs, or failure modes.

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 very short and has no wasted words, but it reads as two disconnected fragments rather than a front-loaded informative sentence. It is concise to the point of under-specification rather than efficient communication.

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 the parameter schema is fully documented, so the description is not obligated to explain return values or parameter formats. However, for a 2-required-param tool in a crowded sibling set, the lack of any routing guidance leaves a real gap that the structured fields cannot fill.

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 both parameters (url, jq) are documented in detail in the schema, including the array shape and field names (page, part, duration). The description adds no parameter-level information beyond that, 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 identifies the resource (分P / video parts / pages) but largely restates the tool name rather than naming an action with scope. The English gloss '(video parts, pages)' helps clarify the domain, and '单段视频返回一项' hints at output cardinality, but it never says explicitly what is fetched or how it differs from get_video_info.

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, no exclusions, and no mention of alternatives such as get_video_info, get_danmaku, or get_subtitles, all of which are plausible siblings an agent could confuse with this one. The agent must infer usage purely 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_subtitlesA
Read-only

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

(subtitles, captions, transcript)

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
langNo
countYes
jq_countNo
video_idYes
elapsed_sNo
subtitlesYes
available_langsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, openWorldHint), and the description adds meaningful context beyond them: an auth requirement and a data-quality caveat that subtitles may be AI-generated or machine-translated and thus error-prone. No format or pagination detail, but the added warnings are genuinely useful.

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-loads the return format, auth requirement, and quality caveat in three short lines with no filler. Slightly under-elaborated rather than verbose.

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 a full output schema and 100% parameter coverage, the description need only carry auth and caveats, which it does. The remaining gap is the absence of guidance on when to prefer this over related content tools.

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%, with jq, url, lang, and page each thoroughly documented in the schema (including the 逐句 output shape and available_langs). The description adds nothing about parameters, so the 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 name get_subtitles plus the parenthetical gloss (subtitles, captions, transcript) makes the resource unambiguous, and 逐句返回 specifies the return granularity. It is clear what the tool retrieves, though it lacks explicit differentiation from siblings like get_danmaku.

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 states a prerequisite (需要登录) but gives no when-to-use guidance or alternatives relative to sibling tools such as get_danmaku or get_video_info. Usage is only implied by the tool name and keywords.

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
author_urlYesUP 主空间链接(其他工具返回的 author_url),或数字 mid。

Output Schema

ParametersJSON Schema
NameRequiredDescription
midYes
sexNo
vipNo
signNo
levelNo
authorNo
face_urlNo
elapsed_sNo
author_urlNo
like_countNo
official_typeNo
follower_countNo
official_titleNo
following_countNo

TDQS

C2.6/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 nothing behavioral — no auth requirement, no rate limit, no caching or freshness note — and the field list it does give is redundant with the existing output 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?

Very short, but the brevity comes from omission rather than tight construction — it is a bare field list with a parenthetical gloss, lacking a leading verb or use context. Nothing is padded, but nothing is front-loaded either.

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 single parameter is fully documented in the schema. What remains missing is when to reach for this tool versus its many siblings, leaving the definition adequate but not self-sufficient.

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?

Only one parameter, and schema coverage is 100% with a description explaining it accepts either an author_url or a numeric mid. The description adds no parameter meaning beyond the schema, 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 enumerates returned fields (昵称、签名、等级、粉丝数…) and adds the gloss 'uploader profile, channel info, followers', which implies a profile-fetch, but it contains no verb and never states it retrieves UP主 profile data. It also does not distinguish itself from siblings like list_up_videos or get_video_info.

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, no prerequisites (e.g. needing an author_url from another tool), and no mention of alternatives. The agent must infer usage entirely from the field list.

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

get_video_infoC
Read-only

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

统计口径:评论数含二级评论;弹幕数与整片时长是全部分段之和, 当前段时长只算这一段。

(video info, metadata, stats)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。
pageNo分段序号,1 起。不传时取链接里的 ?p=N,两者都没有则第 1 段。单段视频忽略此项。

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlNo
staffNo
titleYes
authorNo
summaryNo
copyrightNo
cover_urlNo
elapsed_sNo
author_urlNo
coin_countNo
like_countNo
part_countNo
view_countNo
category_idNo
share_countNo
current_pageNo
current_partNo
duration_secNo
published_atNo
comment_countNo
favorite_countNo
total_duration_secNo
danmaku_count_totalNo

TDQS

C2.9/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 does add genuinely useful interpretation context beyond annotations — that comment counts include second-level replies, danmaku counts and full duration are summed across all parts, while segment duration is per-segment — but it says nothing about auth needs, rate limits, or failure behavior.

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 and the statistical caveats are valuable, but it is not front-loaded with a purpose statement — it opens with a field enumeration that duplicates what the existing output schema already provides, making the first sentence the weakest rather than the strongest part.

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, the description need not restate return fields, and it does supply the non-obvious aggregation semantics an agent needs to interpret those fields correctly. Annotations cover the safety profile and the schema covers both parameters, leaving only usage routing unaddressed.

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 both url (link/short-link/BV-av/share text) and page (1-based segment index, fallback to ?p=N, then segment 1) are already fully documented in the schema. The description contributes nothing additional about parameters, 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 never states an action verb; it opens with a list of returned fields (title, author, publish time, description, statistics), which largely restates the tool name get_video_info. It weakly implies the resource is a single video's metadata rather than comments/danmaku/parts, but the differentiation from siblings is left to 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, no prerequisites, and no reference to alternatives such as get_parts or get_comments even though those siblings overlap in subject matter. The agent must infer usage purely from the name and schema.

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。体积大、多数任务用不到的字段:url(后续调用其他工具时需要);特定任务需要时照常使用。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
orderNo排序。newest
cursorNo续取游标:不传从头开始,回传上次返回的 next_cursor 取下一批。
keywordNo按关键词筛选投稿,平台除标题外也会匹配简介等。
author_urlYesUP 主空间链接(其他工具返回的 author_url),或数字 mid。

Output Schema

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

TDQS

B3.1/5.0
Behavior4/5

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

Annotations cover readOnlyHint=true and openWorldHint=true, so the safety profile is already known. The description adds genuinely non-obvious behavior: max 40 items per batch, that 'total' means the overall video count but the matched count when a keyword is supplied, and that login is required. That is useful 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.

Conciseness3/5

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

It is short, but the structure is poor: a trailing keyword-stuffed parenthetical in English and a stray list fragment, with the behavioral facts front-loaded instead of the purpose. Nothing is verbose, yet the ordering and mixed-language fragments cost clarity.

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 100% schema coverage, the description only needs to supply what structured fields cannot: the login requirement, the 40-per-batch cap, and the meaning of the total field. It covers those, so it is close to complete for this tool, though the missing purpose/usage framing is a small 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 coverage is 100% and the schema itself already documents jq, cursor, order, keyword, and author_url in detail, including that keyword matches beyond title. The description's keyword/total note largely restates what the schema says, 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 tool name and the parenthetical tag list ("uploader videos, channel uploads, other videos by this author") imply the resource, but the description never states a verb+resource sentence like 'list the videos uploaded by a given UP主'. The Chinese text instead leads with batch size and return semantics, so the core purpose is inferable rather than stated.

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?

"需要登录" gives a prerequisite, but there is no when-to-use guidance and no routing against siblings such as search_videos, get_feed, or get_up_videos-style alternatives. An agent gets no signal about when this is the right tool versus a search or feed tool.

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

logoutA

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYes
messageYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, consistent with a credential-deleting operation. The description adds genuine context beyond the annotations by specifying the credentials are LOCAL, which tells the agent this is a client-side clean-up rather than a server session revocation. It does not state whether the user must re-authenticate afterward, keeping it short of a 5.

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?

A single front-loaded sentence carrying the full meaning, with the bilingual synonyms in parentheses aiding disambiguation. Nothing wasted.

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. For a no-argument, single-purpose logout tool the description covers what is needed; it only lacks a note on post-logout state or prerequisites.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4; the description has no parameter semantics to add and does not need to.

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?

States a specific verb and resource: it deletes locally stored credentials, which is exactly what 'logout' means and distinguishes it from siblings like get_login_status and start_qr_login. Clear enough that an agent can tell it apart from the login-flow tools, though it doesn't name any of them.

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?

Usage is implied by the name and description — call this when the user wants to sign out — but there is no explicit when-to-use statement, no prerequisite (must be logged in), and no mention of how it relates to get_login_status or the QR-login tools. Adequate for such a simple, self-evident operation, but no guidance is actually provided.

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。体积大、多数任务用不到的字段:url(后续调用其他工具时需要)、author_url(查看 UP 主时需要)、tags、summary;特定任务需要时照常使用。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。
orderNo排序。relevance 是 B 站的综合排序。relevance
queryYes搜索关键词。
cursorNo续取游标:不传从头开始,回传上次返回的 next_cursor 取下一批。

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
resultsYes
has_moreYes
jq_countNo
elapsed_sNo
next_cursorNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover readOnly/openWorld safety, but the description adds genuinely useful behavior: a 30-item batch cap, a 30-batch ceiling, paid courses being filtered out, batches possibly being short, and summaries being platform-truncated. These tell the agent how to interpret and iterate results, which the annotations do not.

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 with no filler, but the ordering buries the primary purpose at the very end behind pagination limits and field notes. The batch/pagination caveats are useful but would land better after a leading statement of what the tool does.

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, return-value detail is not required, and pagination (cursor/next_cursor) plus the truncated-summary caveat are covered. Combined with annotations covering the safety profile, an agent has enough to invoke and iterate correctly, though the lack of sibling routing detail is a minor 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%, so the schema already documents query, order, cursor, and jq thoroughly. The description adds almost nothing parameter-specific beyond noting that pagination fields are not part of the jq input, which the schema already implies. 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.

Purpose4/5

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

The trailing parenthetical states a clear verb+resource ('search videos, find video by keyword'), so the agent knows this searches the video catalog by keyword. It also hints at a sibling relationship by naming get_video_info for full descriptions. It does not, however, distinguish itself from suggest_keywords or list_up_videos, so differentiation is partial.

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

Usage Guidelines3/5

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

The description gives one concrete routing rule — use get_video_info to get the untruncated summary — and explains the pagination flow via next_cursor. Beyond that there is no explicit when-to-use/when-not guidance relative to the other search-adjacent siblings, leaving selection mostly to inference.

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

返回内联二维码图片。不写入本地凭据,由 complete_qr_login 写入。

(QR code login)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is partly covered, but the description adds genuinely useful side-effect context: no local credentials are persisted and the write happens in a separate tool. It does not mention QR expiry/refresh behavior, which would be the remaining gap.

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 sentences, front-loaded with the return value and followed by the credential-handling note. No filler, though the redundant English '(QR code login)' parenthetical adds little.

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 no input parameters and no output schema, the description adequately covers what the tool produces (an inline QR image) and how it relates to the completion step. Only the lifecycle details of the QR code (expiry, polling cadence) are absent, which is a minor gap.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. Schema coverage is 100% and trivially complete.

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?

States a specific action and return artifact ('returns an inline QR code image') and explicitly distinguishes itself from the sibling that performs the write ('credentials are written by complete_qr_login'). An agent can select it without opening the schema.

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

Usage Guidelines4/5

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

The description makes the pairing with complete_qr_login clear, implying this is the entry step of a two-call flow. It does not state explicit preconditions (e.g., whether an existing session blocks the call) or an explicit 'when not to use', so it stops 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.

suggest_keywordsA
Read-only

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

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

(search suggestions, autocomplete, related keywords)

ParametersJSON Schema
NameRequiredDescriptionDefault
termYes已输入的关键词,可以只是开头几个字。

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
elapsed_sNo
suggestionsYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds genuinely useful behavior beyond that: a hard cap of 10 suggestions and the fact that symbols such as + and # are ignored during suggestion matching, which materially affects how an agent should phrase the input term.

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 an English synonym parenthetical; the result cap and symbol behavior are front-loaded and nothing is padded. Slightly more frugal than a fully optimized definition but no wasted text.

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 annotations cover the read-only/open-world profile. The description supplies purpose, result count, and input-symbol behavior, leaving only the selection guidance versus search_videos unstated.

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% and the single `term` parameter is already documented as a possibly partial keyword. The description adds no format, length, or normalization rules for the term itself, so this sits at the baseline for high-coverage schemas.

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?

States a specific resource and scope: 'B 站搜索框的联想词' (Bilibili search-box autocomplete terms), capped at 10. It is clearly distinct from sibling tools like search_videos or get_video_info, though it never names an alternative to reinforce the contrast.

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?

Usage is only implied by '搜索框的联想词' — an agent can infer this is for typeahead-style suggestion expansion, not full search. There is no explicit when-to-use/when-not statement and no pointer to search_videos as the alternative for actual result retrieval.

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. 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"
        +}
  2. 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

A3.5/5.0

Scored across 16 tools

Disambiguation5/5

Each tool targets a clearly distinct resource or action: video info vs. parts vs. frame vs. subtitles vs. danmaku are separated, and get_comments vs. get_comment_replies are explicitly differentiated (top-level vs. sub-replies). The login cluster (start_qr_login, complete_qr_login, get_login_status, logout) has separable roles despite sharing the auth theme. No tool appears to duplicate another.

Naming Consistency5/5

Nearly all tools follow a clean verb_noun pattern (get_comments, get_video_info, search_videos, list_up_videos, get_up_info, get_feed, get_login_status, get_danmaku, suggest_keywords). The only deviations, logout and the start/complete_qr_login pair, are standard idioms that remain predictable.

Tool Count4/5

16 tools is reasonable for a Bilibili content surface spanning auth, video data, and discovery, and each tool maps to a genuine operation. It sits near the upper end of comfortable scoping but does not feel padded.

Completeness4/5

Coverage is broad: auth lifecycle, video metadata, comments/replies, danmaku, subtitles, parts, frames, search, suggestions, feed, and uploader info. Gaps are minor — no write/interaction operations (like, favorite, follow) or related-video lookup — but core read workflows are fully supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Bilibili (哔哩哔哩) through its API, supporting video search and recommendations, user search, dynamic feeds, video collections, and danmaku retrieval through natural language.
    5
    -
  • 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.
    59 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
    32 npm
    5
    MIT