polylens-bilibili
只读的 B 站公开信息 MCP 服务:读取视频、评论、字幕等数据,并用 jq 在返回前筛选裁剪,可本地或 HTTP+OAuth 远程接入。
搜索与发现:
search_videos关键词搜索视频(每批 30 条,最多 30 批,可排序)、suggest_keywords搜索联想词、get_feed首页推荐流。UP 主:
get_up_info查资料(签名、粉丝、关注、获赞、等级、认证等,可批量)、list_up_videos查投稿(每批最多 40 条,按最新/播放/收藏排序,可按关键词筛选)。视频信息:
get_video_info获取标题、作者、发布时间、简介与各项统计(可批量、可分 P)、get_parts分 P 清单、get_danmaku_counts每段弹幕数(支持?p=1-12等范围)。评论:
get_comments取主评论(热度序或时间序、游标续取、带缓存)、get_comment_replies取某条主评论下的二级评论(分页、总数、被隐藏数)。字幕:
get_subtitles逐句字幕,含起止秒数,可指定语种。jq 精简:多数工具必须传
jq,返回前筛选条目或裁剪字段以减少上下文占用。登录管理:
start_qr_login/complete_qr_login扫码登录,get_login_status/logout查询状态与退出登录。版本检查:
get_version对比运行版本与 PyPI 最新版、查用法变化。部署方式:本地 stdio(uvx / Claude Code / Claude Desktop)或 HTTP + OAuth 远程连接器接入。
Reads public information from Bilibili, with tools for searching videos and keyword suggestions, listing an UP主's uploads, fetching UP主 profiles, home feed recommendations, video details, multi-part video lists, danmaku, comments and comment replies, subtitles, and video frame snapshots; some features (comments, subtitles, frames) require Bilibili login via QR code.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@polylens-bilibili在B站搜索原神,看看有哪些热门视频"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
polylens-bilibili-mcp
读取 B 站视频、评论、字幕等公开信息的 MCP 服务,支持用 jq 在返回前筛选和裁剪结果,可本地运行,也可通过 HTTP + OAuth 远程接入。只读,不向平台写入任何数据。
工具
工具 | 说明 |
| 按关键词搜索视频,每批 30 条,最多 30 页 |
| 搜索框联想词 |
| 首页推荐流,每批 30 条 |
| UP 主资料:签名、粉丝、获赞、等级、认证等,可一次查多个 |
| UP 主投稿,每批最多 40 条,可按最新、播放、收藏排序 |
| 标题、作者、发布时间、简介与各项统计,可一次查多个视频或分 P |
| 分 P 清单,可一次查多个视频 |
| 每个分 P 的弹幕数,可一次查多个视频, |
| 主评论,热度序或时间序,游标续取 |
| 某条主评论下的二级评论 |
| 逐句字幕,含起止秒数,可指定语种 |
| 扫码登录 |
| 查询登录状态、退出登录 |
| 运行中的版本与 PyPI 最新版本,用于判断工具说明是否为旧缓存、服务是否需要升级;传 |
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 参数,在返回前筛选条目或裁剪字段,减少上下文占用。表达式由模型自行编写,传 . 则原样返回,例如:
用途 | 表达式 |
字幕只要文本 |
|
只看第 10 到 15 分钟的字幕 |
|
搜索结果只留高播放量 |
|
安装
需要 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,首次授权时在同意页输入上面的口令。
环境变量 | 命令行 | 默认 | 说明 |
|
|
|
|
|
|
| 监听地址 |
|
|
| 监听端口 |
|
| 无 | 公网地址 |
| 无 | 无 | 机主口令 |
| 无 | 否 | 关闭鉴权,仅限本机调试 |
| 无 | 无 | 取字幕用的 HTTP 代理,如 |
命令行优先于环境变量。http 模式下公网地址和口令缺一则拒绝启动。开启 INSECURE_NO_AUTH=1 后任何能连到端口的人都能调用全部工具,包括使用已保存的登录凭据。
评论限速
平台会拦截频繁的请求,被拦后约 15 分钟恢复。为此:
评论每分钟最多 30 页,超出时排队等待。
被拦后评论工具停用 15 分钟,恢复后自动可用,其他工具不受影响。
评论结果按整次调用缓存:除 jq 外参数相同的调用直接返回缓存,不占额度,被拦期间也能返回。只缓存完整的结果,不设有效期,总量超过约 50 MB 时淘汰最久没用的,服务重启后清空。
弹幕数按分段缓存,与评论共用上述上限,
refresh重取。
免责声明与许可证
本工具供个人学习与研究使用。需要登录的功能以使用者本人的凭据,在其账号权限范围内访问,不绕过付费墙或内容保护。所获内容版权归原发布方,使用者须自行遵守法律、平台条款与版权规定,并承担使用后果。
以 Apache License 2.0 授权,按现状提供,不附任何担保。
Available Tools
16 toolscomplete_qr_loginC
取回凭据并写入本地。
(finish QR code login, poll QR status)
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | start_qr_login 返回的 key。 | |
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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_repliesARead-only
二级评论按时间正序排列。
total 是该主评论下平台能列出的二级评论总数,可用来算页数。 withheld 是该主评论下平台未列出的二级评论条数(已删除或被折叠)。 某条主评论取不到(评论不存在、不属于这个视频)时只在它的 error 里说明,其他照常返回。 中途被风控或限流时,已取完的照常返回,其余的 error 里说明原因。 parent_id 为空表示直接回复主评论,否则是所回复的那条二级评论的 id。 parent_id 指向的二级评论不在列表里时,那条被平台隐藏了,取不到。 除 jq 外参数相同的调用返回同一结果,from_cache 表示是否来自缓存; 被限速的不完整结果不缓存,要新数据用 refresh。 调用没收到结果时服务端仍会取完,之后用相同参数再取直接用缓存。 image_urls、link_titles 是字符串,多个时以换行分隔。
(comment replies, sub-replies, thread)
| Name | Required | Description | Default |
|---|---|---|---|
| jq | Yes | 必填的 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 是其长度。 | |
| pages | Yes | 每条主评论取几页,每页 20 条。has_more 表示后面还有。与主评论合计每分钟约取 30 页,取得多则耗时长,可以分几次取。 | |
| video | Yes | 视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。 | |
| refresh | No | 跳过缓存重新取,并更新缓存。 | |
| start_page | No | 每条主评论从第几页开始,1 起。 | |
| comment_ids | Yes | 主评论 id 列表,从 get_comments 返回的 comments 表里取。 | |
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| video_id | Yes | |
| cached_at | No | |
| elapsed_s | No | |
| from_cache | No |
TDQS
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.
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.
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.
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.
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.
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_commentsARead-only
不含二级评论,二级评论通过 get_comment_replies 获取。
image_urls、link_titles 是字符串,多个时以换行分隔。
(video comments)
| Name | Required | Description | Default |
|---|---|---|---|
| jq | Yes | 必填的 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 是其长度。 | |
| mode | No | 排序方式:hot 是平台的综合排序。hot 的 cursor 只标识浏览会话,进度记在平台侧,翻页与重放靠 batch_id;同一视频同一时间只用一个 hot cursor:新开会话(包括其他对话里的)后,旧 cursor 会重复取过的内容或提前返回空,混用时新的也会回退;遇到时从 cursor 为空重新开始。newest 按时间倒序,cursor 含位置,可重复取同一批,不受新会话影响。需要完整抓取或断点续取时用 newest。缓存:除 jq 外参数相同的调用返回同一结果,from_cache 表示是否来自缓存;被限速的不完整结果不缓存。newest 要新数据用 refresh,hot 换 batch_id 取下一批。调用没收到结果时服务端仍会取完,之后用相同参数再取直接用缓存。 | hot |
| count | Yes | 至少取多少条主评论。平台按每页约 20 条整页返回,实际条数可能多于 count;评论不够时返回剩余的全部。主评论与二级评论合计每分钟约取 30 页(约 600 条),取得多则耗时长,可以分几次取。 | |
| video | Yes | 视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。 | |
| cursor | No | 续取游标:不传从头开始,回传上次返回的 next_cursor 取下一批。 | |
| refresh | No | 跳过缓存重新取,并更新缓存。仅用于 newest。 | |
| batch_id | No | mode=hot 时必填。自定的短字符串:其他参数相同时,同一个值返回同一批,换新值取下一批。重放结果与之前不同时,原批次已丢失,需要就从 cursor 为空重新开始。 | |
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| message | No | |
| comments | Yes | |
| has_more | Yes | |
| jq_count | No | |
| video_id | Yes | |
| cached_at | No | |
| elapsed_s | No | |
| from_cache | No | |
| next_cursor | No |
TDQS
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.
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.
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.
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.
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.
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_countsARead-only
每个视频一组,每段一行,段号看 page。不写 ?p= 取全部分段。
danmaku_count 由平台封顶,分段越长上限越高(如约 8 分钟的为 2000、约 30 分钟的 为 6000、45 分钟以上的为 12000),达到上限时实际弹幕更多。 按段缓存,cached_at 非空表示来自缓存及其抓取时间,要新数据用 refresh。 调用没收到结果时服务端仍会取完,之后再取直接用缓存。
(danmaku count per part)
| Name | Required | Description | Default |
|---|---|---|---|
| jq | Yes | 必填的 jq 表达式。输入是单个视频的分段组成的数组,每条字段:page,part,duration,danmaku_count,cached_at,error。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。 | |
| videos | Yes | 视频列表,每项为链接、b23.tv 短链或裸 BV/av 号。?p= 可写单段或范围,如 ?p=3、?p=1-12、?p=1-3,7。 | |
| refresh | No | 跳过缓存重新取,并更新缓存。 | |
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| elapsed_s | No |
TDQS
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.
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.
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.
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.
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.
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_feedARead-only
B 站首页推荐流,每批最多 30 条。
(homepage feed, recommendations, browse)
| Name | Required | Description | Default |
|---|---|---|---|
| jq | Yes | 必填的 jq 表达式。输入是全部条目组成的数组,每条字段:title,url,author,author_url,published_at,duration_sec,view_count,danmaku_count,like_count,rcmd_reason。体积大、多数任务用不到的字段:author_url(查看 UP 主时需要);特定任务需要时照常使用。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。 | |
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| feed | Yes | |
| count | Yes | |
| jq_count | No | |
| elapsed_s | No |
TDQS
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.
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.
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.
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.
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.
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_statusBRead-only
联网向平台核验。
is_login 为 null 表示无法验证,与 false 不同。
(login status)
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| is_login | Yes |
TDQS
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.
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.
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.
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.
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.
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_partsCRead-only
即分 P,每个视频一组。单段视频返回一项。(video parts, pages)
| Name | Required | Description | Default |
|---|---|---|---|
| jq | Yes | 必填的 jq 表达式。输入是单个视频的分段组成的数组,每条字段:page,part,duration。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。 | |
| videos | Yes | 视频列表,每项为链接、b23.tv 短链或裸 BV/av 号。 | |
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| elapsed_s | No |
TDQS
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.
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.
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.
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.
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.
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_subtitlesCRead-only
逐句返回。字幕可能为 AI 生成或机器翻译,存在误差。
(subtitles, captions, transcript)
| Name | Required | Description | Default |
|---|---|---|---|
| jq | Yes | 必填的 jq 表达式。输入是全部条目组成的数组,每条字段:start,end,content。体积大、多数任务用不到的字段:start(需要定位时间时保留)、end;特定任务需要时照常使用。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。 | |
| lang | No | 轨道语种,如 zh-CN、en-US、ai-zh。不传则取平台给的第一条。可选值见返回的 available_langs。 | |
| page | No | 分段序号,1 起。不传时取链接里的 ?p=N,两者都没有则第 1 段。单段视频忽略此项。 | |
| video | Yes | 视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。 | |
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| lang | No | |
| count | Yes | |
| jq_count | No | |
| video_id | Yes | |
| elapsed_s | No | |
| subtitles | Yes | |
| available_langs | No |
TDQS
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.
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.
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.
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.
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.
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_infoCRead-only
含昵称、签名、等级、粉丝数、关注数、总获赞、认证、大会员等。
(uploader profile, channel info, followers)
| Name | Required | Description | Default |
|---|---|---|---|
| jq | Yes | 必填的 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 是其长度。 | |
| authors | Yes | UP 主列表,每项为空间链接(其他工具返回的 author_url)或数字 mid。 | |
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| failed | Yes | |
| authors | Yes | |
| jq_count | No | |
| elapsed_s | No |
TDQS
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.
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.
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.
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.
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.
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_versionBRead-only
本说明对应版本 0.13.0。running 与之不同表示工具说明是旧缓存:可把 0.13.0 传入 since 查看之后的用法变化。工具定义里没有的参数也可照传;工具列表里没有的工具需重连才能使用。running 低于 latest 表示服务未升级。latest 查不到时为 null。(server version)
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | 本说明的版本号。传入后返回之后的用法变化。 | |
| description | No | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| latest | Yes | |
| changes | No | |
| running | Yes |
TDQS
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.
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.
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.
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.
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.
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_infoBRead-only
含标题、作者、发布时间、简介与各项统计。
统计口径:评论数含二级评论;弹幕数与整片时长是全部分段之和, 当前段时长只算这一段。单段视频忽略 ?p=,current_page 为空。 staff 仅联合投稿有值,格式为"名字(角色,mid)",以分号分隔。
(video info, metadata, stats)
| Name | Required | Description | Default |
|---|---|---|---|
| jq | Yes | 必填的 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 是其长度。 | |
| videos | Yes | 视频列表,每项为链接、b23.tv 短链或裸 BV/av 号。分段写在项里,如 BV1xx?p=2,不写为第 1 段。 | |
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| failed | Yes | |
| videos | Yes | |
| jq_count | No | |
| elapsed_s | No |
TDQS
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.
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.
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.
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.
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.
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_videosBRead-only
每批最多 40 条。total 是视频总数,带 keyword 时为匹配数。
(uploader videos, channel uploads, other videos by this author)
| Name | Required | Description | Default |
|---|---|---|---|
| jq | Yes | 必填的 jq 表达式。输入是本批条目组成的数组,每条字段:title,url,published_at,duration_sec,view_count,danmaku_count,comment_count。分页字段不在输入里;只筛本批,筛完为空时仍以 has_more 判断有无下一批。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。 | |
| order | No | 排序。 | newest |
| cursor | No | 续取游标:不传从头开始,回传上次返回的 next_cursor 取下一批。 | |
| keyword | No | 按关键词筛选投稿,平台除标题外也会匹配简介等。 | |
| author_url | Yes | UP 主空间链接(其他工具返回的 author_url),或数字 mid。 | |
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| total | Yes | |
| author | Yes | |
| videos | Yes | |
| has_more | Yes | |
| jq_count | No | |
| elapsed_s | No | |
| author_url | Yes | |
| next_cursor | No |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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_videosARead-only
每批最多 30 条,最多翻 30 批。
结果已滤掉付费课程,一批可能不满 30 条。summary 是平台截断过的简介, 完整简介通过 get_video_info 获取。
(search videos, find video by keyword)
| Name | Required | Description | Default |
|---|---|---|---|
| jq | Yes | 必填的 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 是其长度。 | |
| order | No | 排序。relevance 是 B 站的综合排序,推荐用默认值,不推荐其他排序。 | relevance |
| cursor | No | 续取游标:不传从头开始,回传上次返回的 next_cursor 取下一批。 | |
| keyword | Yes | 搜索关键词。 | |
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| results | Yes | |
| has_more | Yes | |
| jq_count | No | |
| elapsed_s | No | |
| next_cursor | No |
TDQS
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.
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.
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.
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.
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.
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_loginARead-only
返回内联二维码图片和对应的链接 url。不写入本地凭据,由 complete_qr_login 写入。
(QR code login)
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | 格式为 工具名:目的。 |
TDQS
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.
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.
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.
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.
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.
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_keywordsARead-only
B 站搜索框的联想词,最多 10 条。
平台联想时会忽略 + # 等符号。
(search suggestions, autocomplete, related keywords)
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | 已输入的关键词,可以只是开头几个字。 | |
| description | Yes | 格式为 工具名:目的。 |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| elapsed_s | No | |
| suggestions | Yes |
TDQS
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.
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.
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.
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.
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.
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.
18 tool updates
v0.12.1- Changed
complete_qr_login2 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "key" -]New value: +[ + "description", + "key" +]
- Changed
get_comment_replies9 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - changed
Input schema / properties / pages / descriptionPrevious value: -"每条主评论取几页,每页 20 条。has_more 表示后面还有。"New value: +"每条主评论取几页,每页 20 条。has_more 表示后面还有。与主评论合计每分钟约取 30 页,取得多则耗时长,可以分几次取。" - added
Input schema / properties / refreshAdded value: +{ + "default": false, + "description": "跳过缓存重新取,并更新缓存。", + "title": "Refresh", + "type": "boolean" +} - removed
Input schema / properties / urlRemoved value: -{ - "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。", - "title": "Url", - "type": "string" -} - added
Input schema / properties / videoAdded value: +{ + "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。", + "title": "Video", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "url", - "comment_ids", - "pages", - "jq" -]New value: +[ + "description", + "video", + "comment_ids", + "pages", + "jq" +] - removed
Output schema / $defs / ReplyThreadItem / properties / cached_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Cached At" -} - added
Output schema / properties / cached_atAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cached At" +} - added
Output schema / properties / from_cacheAdded value: +{ + "default": false, + "title": "From Cache", + "type": "boolean" +}
- Changed
get_comments10 fields changed- added
Input schema / properties / batch_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "mode=hot 时必填。自定的短字符串:其他参数相同时,同一个值返回同一批,换新值取下一批。重放结果与之前不同时,原批次已丢失,需要就从 cursor 为空重新开始。", + "title": "Batch Id" +} - changed
Input schema / properties / count / descriptionPrevious value: -"至少取多少条主评论。平台按每页约 20 条整页返回,实际条数约为 20 的整数倍;评论不够时返回剩余的全部。"New value: +"至少取多少条主评论。平台按每页约 20 条整页返回,实际条数可能多于 count;评论不够时返回剩余的全部。主评论与二级评论合计每分钟约取 30 页(约 600 条),取得多则耗时长,可以分几次取。" - added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - changed
Input schema / properties / jq / descriptionPrevious 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 是其长度。" - changed
Input schema / properties / mode / descriptionPrevious 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 取下一批。调用没收到结果时服务端仍会取完,之后用相同参数再取直接用缓存。" - added
Input schema / properties / refreshAdded value: +{ + "default": false, + "description": "跳过缓存重新取,并更新缓存。仅用于 newest。", + "title": "Refresh", + "type": "boolean" +} - removed
Input schema / properties / urlRemoved value: -{ - "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。", - "title": "Url", - "type": "string" -} - added
Input schema / properties / videoAdded value: +{ + "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。", + "title": "Video", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "url", - "count", - "jq" -]New value: +[ + "description", + "video", + "count", + "jq" +] - added
Output schema / properties / from_cacheAdded value: +{ + "default": false, + "title": "From Cache", + "type": "boolean" +}
- Removed
get_danmaku - Added
get_danmaku_counts - Changed
get_feed3 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - changed
Input schema / properties / jq / descriptionPrevious 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 是其长度。" - changed
Input schema / requiredPrevious value: -[ - "jq" -]New value: +[ + "description", + "jq" +]
- Removed
get_frame - Changed
get_login_status2 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "description" +]
- Changed
get_parts12 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - changed
Input schema / properties / jq / descriptionPrevious value: -"必填的 jq 表达式。输入是全部条目组成的数组,每条字段:page,part,duration。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。"New value: +"必填的 jq 表达式。输入是单个视频的分段组成的数组,每条字段:page,part,duration。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。" - removed
Input schema / properties / urlRemoved value: -{ - "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。", - "title": "Url", - "type": "string" -} - added
Input schema / properties / videosAdded value: +{ + "description": "视频列表,每项为链接、b23.tv 短链或裸 BV/av 号。", + "items": { + "type": "string" + }, + "title": "Videos", + "type": "array" +} - changed
Input schema / requiredPrevious value: -[ - "url", - "jq" -]New value: +[ + "description", + "videos", + "jq" +] - added
Output schema / $defsAdded 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" + } +} - removed
Output schema / properties / countRemoved value: -{ - "title": "Count", - "type": "integer" -} - removed
Output schema / properties / jq_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Jq Count" -} - removed
Output schema / properties / partsRemoved value: -{ - "title": "Parts", - "type": "string" -} - added
Output schema / properties / resultsAdded value: +{ + "items": { + "$ref": "#/$defs/PartsItem" + }, + "title": "Results", + "type": "array" +} - removed
Output schema / properties / video_idRemoved value: -{ - "title": "Video Id", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "video_id", - "count", - "parts" -]New value: +[ + "results" +]
- Changed
get_subtitles4 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - removed
Input schema / properties / urlRemoved value: -{ - "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。", - "title": "Url", - "type": "string" -} - added
Input schema / properties / videoAdded value: +{ + "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。", + "title": "Video", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "url", - "jq" -]New value: +[ + "description", + "video", + "jq" +]
- Changed
get_up_info23 fields changed- removed
Input schema / properties / author_urlRemoved value: -{ - "description": "UP 主空间链接(其他工具返回的 author_url),或数字 mid。", - "title": "Author Url", - "type": "string" -} - added
Input schema / properties / authorsAdded value: +{ + "description": "UP 主列表,每项为空间链接(其他工具返回的 author_url)或数字 mid。", + "items": { + "type": "string" + }, + "title": "Authors", + "type": "array" +} - added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - added
Input schema / properties / jqAdded 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" +} - changed
Input schema / requiredPrevious value: -[ - "author_url" -]New value: +[ + "description", + "authors", + "jq" +] - removed
Output schema / properties / authorRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Author" -} - removed
Output schema / properties / author_urlRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Author Url" -} - added
Output schema / properties / authorsAdded value: +{ + "title": "Authors", + "type": "string" +} - added
Output schema / properties / countAdded value: +{ + "title": "Count", + "type": "integer" +} - removed
Output schema / properties / face_urlRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Face Url" -} - added
Output schema / properties / failedAdded value: +{ + "title": "Failed", + "type": "integer" +} - removed
Output schema / properties / follower_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Follower Count" -} - removed
Output schema / properties / following_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Following Count" -} - added
Output schema / properties / jq_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Jq Count" +} - removed
Output schema / properties / levelRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Level" -} - removed
Output schema / properties / like_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Like Count" -} - removed
Output schema / properties / midRemoved value: -{ - "title": "Mid", - "type": "integer" -} - removed
Output schema / properties / official_titleRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Official Title" -} - removed
Output schema / properties / official_typeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Official Type" -} - removed
Output schema / properties / sexRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Sex" -} - removed
Output schema / properties / signRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Sign" -} - removed
Output schema / properties / vipRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Vip" -} - changed
Output schema / requiredPrevious value: -[ - "mid" -]New value: +[ + "count", + "failed", + "authors" +]
- Added
get_version - Changed
get_video_info35 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - added
Input schema / properties / jqAdded 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" +} - removed
Input schema / properties / pageRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "分段序号,1 起。不传时取链接里的 ?p=N,两者都没有则第 1 段。单段视频忽略此项。", - "title": "Page" -} - removed
Input schema / properties / urlRemoved value: -{ - "description": "视频链接、b23.tv 短链,或裸 BV/av 号;含链接的分享文案也可直接传入。", - "title": "Url", - "type": "string" -} - added
Input schema / properties / videosAdded value: +{ + "description": "视频列表,每项为链接、b23.tv 短链或裸 BV/av 号。分段写在项里,如 BV1xx?p=2,不写为第 1 段。", + "items": { + "type": "string" + }, + "title": "Videos", + "type": "array" +} - changed
Input schema / requiredPrevious value: -[ - "url" -]New value: +[ + "description", + "videos", + "jq" +] - removed
Output schema / $defsRemoved 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" - } -} - removed
Output schema / properties / authorRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Author" -} - removed
Output schema / properties / author_urlRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Author Url" -} - removed
Output schema / properties / category_idRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Category Id" -} - removed
Output schema / properties / coin_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Coin Count" -} - removed
Output schema / properties / comment_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Comment Count" -} - removed
Output schema / properties / copyrightRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Copyright" -} - added
Output schema / properties / countAdded value: +{ + "title": "Count", + "type": "integer" +} - removed
Output schema / properties / cover_urlRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Cover Url" -} - removed
Output schema / properties / current_pageRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Current Page" -} - removed
Output schema / properties / current_partRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Current Part" -} - removed
Output schema / properties / danmaku_count_totalRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Danmaku Count Total" -} - removed
Output schema / properties / duration_secRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Duration Sec" -} - added
Output schema / properties / failedAdded value: +{ + "title": "Failed", + "type": "integer" +} - removed
Output schema / properties / favorite_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Favorite Count" -} - removed
Output schema / properties / idRemoved value: -{ - "title": "Id", - "type": "string" -} - added
Output schema / properties / jq_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Jq Count" +} - removed
Output schema / properties / like_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Like Count" -} - removed
Output schema / properties / part_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Part Count" -} - removed
Output schema / properties / published_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Published At" -} - removed
Output schema / properties / share_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Share Count" -} - removed
Output schema / properties / staffRemoved value: -{ - "anyOf": [ - { - "items": { - "$ref": "#/$defs/StaffMember" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Staff" -} - removed
Output schema / properties / summaryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Summary" -} - removed
Output schema / properties / titleRemoved value: -{ - "title": "Title", - "type": "string" -} - removed
Output schema / properties / total_duration_secRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Total Duration Sec" -} - removed
Output schema / properties / urlRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Url" -} - added
Output schema / properties / videosAdded value: +{ + "title": "Videos", + "type": "string" +} - removed
Output schema / properties / view_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "View Count" -} - changed
Output schema / requiredPrevious value: -[ - "id", - "title" -]New value: +[ + "count", + "failed", + "videos" +]
- Changed
list_up_videos3 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - changed
Input schema / properties / jq / descriptionPrevious 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 是其长度。" - changed
Input schema / requiredPrevious value: -[ - "author_url", - "jq" -]New value: +[ + "description", + "author_url", + "jq" +]
- Changed
logout2 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "description" +]
- Changed
search_videos6 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - changed
Input schema / properties / jq / descriptionPrevious 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 是其长度。" - added
Input schema / properties / keywordAdded value: +{ + "description": "搜索关键词。", + "title": "Keyword", + "type": "string" +} - changed
Input schema / properties / order / descriptionPrevious value: -"排序。relevance 是 B 站的综合排序。"New value: +"排序。relevance 是 B 站的综合排序,推荐用默认值,不推荐其他排序。" - removed
Input schema / properties / queryRemoved value: -{ - "description": "搜索关键词。", - "title": "Query", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "query", - "jq" -]New value: +[ + "description", + "keyword", + "jq" +]
- Changed
start_qr_login2 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "description" +]
- Changed
suggest_keywords2 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "格式为 工具名:目的。", + "title": "Description", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "term" -]New value: +[ + "description", + "term" +]
9 tool updates
v0.3.1- Changed
get_comment_replies9 fields changed- added
Input schema / properties / jqAdded 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" +} - removed
Input schema / properties / limitRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "每个楼只取最早的多少条回复,has_more 表示被截断。不传则取完整个楼。", - "title": "Limit" -} - added
Input schema / properties / pagesAdded value: +{ + "description": "每条主评论取几页,每页 20 条。has_more 表示后面还有。", + "title": "Pages", + "type": "integer" +} - added
Input schema / properties / start_pageAdded value: +{ + "default": 1, + "description": "每条主评论从第几页开始,1 起。", + "title": "Start Page", + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "url", - "comment_ids" -]New value: +[ + "url", + "comment_ids", + "pages", + "jq" +] - added
Output schema / $defs / ReplyThreadItem / properties / cached_atAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cached At" +} - added
Output schema / $defs / ReplyThreadItem / properties / errorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" +} - added
Output schema / $defs / ReplyThreadItem / properties / jq_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Jq Count" +} - added
Output schema / $defs / ReplyThreadItem / properties / totalAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Total" +}
- Changed
get_comments7 fields changed- changed
Input schema / properties / count / descriptionPrevious value: -"想要的主评论条数,实际返回可能多于或少于这个数。"New value: +"至少取多少条主评论。平台按每页约 20 条整页返回,实际条数约为 20 的整数倍;评论不够时返回剩余的全部。" - added
Input schema / properties / jqAdded 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" +} - changed
Input schema / properties / mode / descriptionPrevious value: -"排序方式:hot 是平台的综合排序。hot 的游标绑在一次翻页过程上,中断后无法从原处接续,重复用同一个游标会继续往后走;newest 的游标是位置标识,可以重复取到同一批。"New value: +"排序方式:hot 是平台的综合排序。hot 的 cursor 只标识浏览会话,进度记在平台侧,同一 cursor 每次调用都返回下一批,不能重放某一批;同一视频同一时间只用一个 hot cursor:新开会话后,旧 cursor 只会返回已取过的内容,新旧混用时两者都会回退。newest 按时间倒序,cursor 含位置,可重复取同一批,不受新会话影响。需要完整抓取或断点续取时用 newest。newest 的结果缓存 30 分钟,cached_at 是缓存的抓取时间。" - changed
Input schema / requiredPrevious value: -[ - "url", - "count" -]New value: +[ + "url", + "count", + "jq" +] - added
Output schema / properties / cached_atAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cached At" +} - added
Output schema / properties / jq_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Jq Count" +} - added
Output schema / properties / messageAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" +}
- Changed
get_danmaku4 fields changed- changed
Input schema / properties / count / descriptionPrevious value: -"想要的弹幕条数。取该段里 heat 最高的这么多条,结果仍按时间轴排序;达到或超过该段弹幕总数即返回全部。heat 是平台给每条弹幕的标记,约 1-10 的档位,同档内不再细分。"New value: +"取多少条弹幕。取该段里 heat 最高的这么多条,结果仍按时间轴排序;达到或超过平台给出的条数即全部返回。heat 是平台给每条弹幕的标记,约 1-10 的档位,同档内不再细分。" - added
Input schema / properties / jqAdded value: +{ + "description": "必填的 jq 表达式。输入是按 count 选出的弹幕组成的数组,每条字段:content,timestamp,heat。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。", + "title": "Jq", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "url", - "count" -]New value: +[ + "url", + "count", + "jq" +] - added
Output schema / properties / jq_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Jq Count" +}
- Changed
get_feed3 fields changed- added
Input schema / properties / jqAdded 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" +} - added
Input schema / requiredAdded value: +[ + "jq" +] - added
Output schema / properties / jq_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Jq Count" +}
- Changed
get_parts3 fields changed- added
Input schema / properties / jqAdded value: +{ + "description": "必填的 jq 表达式。输入是全部条目组成的数组,每条字段:page,part,duration。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。", + "title": "Jq", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "url" -]New value: +[ + "url", + "jq" +] - added
Output schema / properties / jq_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Jq Count" +}
- Changed
get_subtitles3 fields changed- added
Input schema / properties / jqAdded value: +{ + "description": "必填的 jq 表达式。输入是全部条目组成的数组,每条字段:start,end,content。体积大、多数任务用不到的字段:start(需要定位时间时保留)、end;特定任务需要时照常使用。结果为字符串时原样返回,其他结果编码为表格或 JSON;结果为数组时 jq_count 是其长度。", + "title": "Jq", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "url" -]New value: +[ + "url", + "jq" +] - added
Output schema / properties / jq_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Jq Count" +}
- Changed
get_up_info2 fields changed- removed
Output schema / properties / article_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Article Count" -} - removed
Output schema / properties / video_countRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Video Count" -}
- Changed
list_up_videos3 fields changed- added
Input schema / properties / jqAdded 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" +} - changed
Input schema / requiredPrevious value: -[ - "author_url" -]New value: +[ + "author_url", + "jq" +] - added
Output schema / properties / jq_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Jq Count" +}
- Changed
search_videos3 fields changed- added
Input schema / properties / jqAdded 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" +} - changed
Input schema / requiredPrevious value: -[ - "query" -]New value: +[ + "query", + "jq" +] - added
Output schema / properties / jq_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Jq Count" +}
16 tool updates
v0.1.0- First observed
complete_qr_login - First observed
get_comment_replies - First observed
get_comments - First observed
get_danmaku - First observed
get_feed - First observed
get_frame - First observed
get_login_status - First observed
get_parts - First observed
get_subtitles - First observed
get_up_info - First observed
get_video_info - First observed
list_up_videos - First observed
logout - First observed
search_videos - First observed
start_qr_login - First observed
suggest_keywords
TDQS
Scored across 16 tools
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.
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.
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.
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
Related MCP Connectors
Bilibili videos for AI agents: search, creators, trending, stats, tags and danmaku comments.
Track Bilibili creators and get the latest updates on videos, dynamics, and articles. Fetch user p…
Bilibili public video, article, dynamic, creator, comments, reactions, and transcript tools.
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceAn 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 npm194MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server powered by public Bilibili APIs so AI agents can search videos and read public video and creator metadata.MIT
- AlicenseBqualityCmaintenanceBilibili MCP server enabling video search, comment management, danmaku, user info, dynamics, live streaming analysis, and more via 31 tools.313,672 npm4MIT
- AlicenseNot gradedqualityCmaintenanceAn 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