Skip to main content
Glama
DavidLearning1023

bilibili-info-gathering


试试看

装好之后(快速开始),你对 Agent 说的第一句话长这样——把引号里的换成你的议题就行:

帮我在B站了解「普通人的投资建议到底靠不靠谱」。

你不需要指定力度——措辞定基础档,议题复杂度定要不要加码:

你说

它做什么

「帮我在B站了解 X」

L2 深挖:10–20 分钟,产出 md + HTML + PDF

「简要了解一下 B站的 X」

L1 速览:3–5 分钟,只出 md

议题里有 8 个以上可比对象(角色/产品/城市)或本身是排序/谁更

自动升 L3 攻坚:先做一张可复现的矩阵,再给结论,25–45 分钟

背景里可以贴 BV 号当线索(帮我在B站了解X。背景:BV1fxni6XEwD), 但不构成分析请求——那是议题的线索,不是"帮我总结这条视频"。

L2/L3 的产物开头长这样(上面那张图):3–5 句结论,每条都挂着具体证据(赞数、楼数,需要时给到 BV 号); 最后那句「本轮唯一可核验的硬数字…单一来源,未交叉验证」——主动降级自己的结论,是这套流程的核心纪律。


Related MCP server: video_agent

30 秒判断要不要用

你想做的事

它做吗

该用什么

「B站上大家对 X 怎么看」「有没有人做过 X」

✅ 这就是它

本项目,深入或简要

「这条视频讲了什么,帮我总结」

❌ 不做

bilibili-video-analysis-summary

「帮我把几个 B站 视频的评论抓下来」

⚠️ 能抓,但你不需要方法论

现成的取数型 MCP 更轻

「按天监控某个 UP 主 / 关键词的热度」

❌ 不做

定时日报类工具

一句话边界:它服务的是「要拿结论去争论、或写进给第三方看的材料」的人, 不服务「三分钟想要个答案」的人。后者用它只会觉得慢。


它解决什么问题

直接用「搜一下、读几条」的方式在 B站上做调研,会以五种很具体的方式失败:

你会撞上的坑

本项目的对策

样本有偏 —— 搜 10 条就以为看全了

多词族广扫 + 声明检索范围与偏差(工具返回 bias_note)

评分失焦 —— 大 UP 跨领域发言 vs 无名用户贴政府统计原文,都变成「中等」

双轴评级:来源 A–F × 可用度 1–4

伪共识 —— 10 条搬运互相复述,看起来像「大家都这么说」

冗余度标记:原创 / 冗余 / 冲突

停不下来 —— 「广度优先」退化成「一直搜下去」

离场规则三档(列表级 / 内容级 / 议题级)

重复劳动 —— 同一个视频被分析三遍

视频索引 + 信源库,跨议题复用

方法论不是自创的,是从四个成熟体系里拼出来的:REA 快速循证评估(英国 GSR / Cochrane)、 Admiralty / NATO 情报评级、信息觅食理论(Pirolli & Card, 1999)、SIFT / 侧读(Caulfield)。 推导过程在 references/,不是一句「参考了业界最佳实践」。


和别的 B站 MCP 不是一类东西

市面上的 B站 MCP 都做得不错——以 @xzxzzx/bilibili-mcp 为代表,它们都在取数层:把搜索、评论、字幕变成结构化 JSON。 本项目也做这件事(14 个工具),但真正的差别在后面一层——

维度

取数型 MCP(如 @xzxzzx/bilibili-mcp)

本项目

回答的问题

「把数据拿给我」

「这件事该信谁、还差什么」

输出

原始 JSON

结论 + 信源地图 + 冲突 + 缺口声明

评级

无,或单一分数

双轴:来源可信度 × 议题可用度

冲突

混在正文里,读者自己发现

单列一节,两边都摆,不下结论

不知道的部分

通常不说

三类缺口,每一类都能行动

可复现

难

检索协议 + 调用账本落盘,数字可复算

「冲突单列」长什么样——这是取数型 MCP 不会给你的东西。同一份真实产出里的 3-A:

两者的关系是可以同时装:14 个工具名与上游没有重名。 分工上,MCP 只负责「拿到干净的数据」,判断全部留给方法论 skill—— 因为评判标准取决于议题和用途,写死在代码里只会僵化。

单条视频精读继续用上游那个;本项目一律用本项目的 MCP。详见 INSTALL.md 第六节。


架构:MCP 做手,skill 做脑

        ┌──────────────────────────────┐
        │  SKILL.md  判断层(方法论)   │   双轴评级 / 离场规则 / 冗余度 / 综合
        └──────────────┬───────────────┘
                       │ 调用
        ┌──────────────▼───────────────┐
        │  MCP server  取数层(确定性) │   搜索 / 评论 / 字幕 / 弹幕 / 图片 / 资产库
        └──────────────────────────────┘

这个分层有一个可验证的好处:换模型不掉证据标准。 判断由强模型做,但每一层的输入输出都是结构化字段,所以结论能被别人拿着账本复核。


三档力度:L1 速览 / L2 深挖 / L3 攻坚

措辞定基础档,复杂度决定要不要加码。 系统不会反问你要哪一档; 判档不看用户,看议题本身(主体多不多、要不要排序)。

L2 深挖(默认)

L1 速览

L3 攻坚(自动或点名)

你怎么说

「帮我在B站了解 X」「B站上关于 X 有什么」

「帮我简要了解一下 B站的 X」「快速说说 B站上关于 X 的风向」

不用你说——主体 ≥8 个 / 比较排序类 / 词族封顶 / 已有轮次留缺口 时自动升;说「全面/逐个/彻底」也升

它多做什么

—

砍通道与流程,不砍判据

换测量单位做矩阵(N 个主体 × 1 次检索)+ 15–25 个子代理画像 + 补做轮

你会得到

决策层结论 + 完整证据链(信源地图 / 发现 / 冲突 / 缺口 / 偏差声明)md + HTML + PDF

结论 + 关键发现 + 主冲突 + 最大缺口默认只出 md

同 L2,外加一张可复现的排序矩阵与逐主体画像

大约

10–20 分钟 / 约 40 次工具调用

3–5 分钟 / 约 10 次工具调用

25–45 分钟 / 600–1,600 次上游请求

为什么会有 L3:2026-10-26「二游超人气角色」第一轮(206 候选 / 13 条深挖 / 11 个子代理) 仍被判"不够全、不够深"。转折点不是多读几条,而是第 2 轮把测量单位从"13 条视频" 换成"42 个角色 × 1 次检索"——那一轮的上游调用(141)比第 1 轮(372)还少。 规则写在 references/analysis-depth.md:每次升级必须新增一根轴,而不是多读几条。

「工具调用」不等于「上游请求」:一次 scan_topic 内部要按关键词逐个打上游, 所以 40 次工具调用会对应 300 次左右的上游请求。两个口径都在报告 §五 和账本里分开列, 不做换算,也不混用。

两者不是「质量高低」,是「样本多少」:

  • L1 砍的是通道(不拉字幕、不抽帧、不跑 ASR)和流程(不做反证、不做归簇、不落检索协议)

  • 它不砍证据标准——评级、交叉验证标记、偏差声明照样给

样本少,但话要算数。

什么时候用简要:你只需要一个可信的风向,用来判断「值不值得再花十几分钟做深入」。 什么时候必须用深入:这份产物要拿去跟人争论,或者写进要给第三方看的材料。


产出:长什么样、放在哪

报告不进 .registry/(那是机器资产,以点开头、默认隐藏)。所有给人读的产物 落在项目根目录的 分析报告库/ —— 中文名,因为它的读者是你,不是代码。

分析报告库/
└── 20261022-深入分析-主流二游社区/
    ├── 主流二游社区·B站信息深入报告.md      ← 唯一真源(Agent 手写)
    ├── 主流二游社区·B站信息深入报告.html    ← 脚本生成,单文件、无外部依赖
    └── 主流二游社区·B站信息深入报告.pdf     ← A4 打印

命名位

规则

例

日期

YYYYMMDD,同议题多轮各占一个目录,不覆盖

20261022

模式

深入分析 / 简要分析

深入分析

议题

照录你的说法(Windows 非法字符替换成 -)

主流二游社区

文档标题

深入 → ·B站信息深入报告;简要 → ·B站信息简报

主流二游社区 ·B站信息深入报告

路径由代码算:python -m big.cli report-path --topic "…" --mode deep --mkdir。 手拼的三种典型错误(2026-10-22 而不是 20261022、深入 而不是 深入分析、 议题里带 /)都不会报错,只会让报告散落在两三个目录里。 怎么装见下方快速开始。

报告的结构(顺序不可乱)

节

装什么

为什么在这个位置

一、结论

3–5 句判断,不是综述

先给「所以呢」

二、发现

按主题聚类;每条带 BV + 时间戳 + 交叉验证。态度类议题末尾附阵营表

证据的主体

三、冲突与未收敛处

两边都列,不下结论

本节的存在本身就是结论

四、缺口与建议

三类缺口(结构性边界 / 检索未覆盖 / 本次未做)+ 下一步去哪补

让「没查到的」可行动

五、检索范围与偏差声明

词族命中、漏斗数字、算法偏差、单轮开销

让结论可被质疑

六、信源地图

深挖对象 / 入选未深挖 / 淘汰清单(每行带 BV 直链)

当附录用,核对时才翻

信源地图为什么在最后:初版放在 §二,读者读完第一屏就撞上一张 140 行的候选表, 真正要看的判断被推到第三屏。核对发生在读完判断之后,所以它当附录。 它也同时是可追溯清单——每行都有直链,不再单列一节。

评级怎么读(B2 是什么意思)

报告顶部有一块读图口径,由渲染脚本自动生成(所以不会各篇不一致)。核心是双轴:

轴

码

含义

来源(信不信得过这个来源)

A / B / C / D / F

一手权威 / 专业二手 / 一般二手 / 观点型 / 无法判断

可用度(对本议题有多少用)

1 / 2 / 3 / 4

直接可用 / 可参考 / 仅背景 / 无关

B2 = 来源 B(专业二手)× 可用度 2(可参考)。两轴不一定同向: 大 UP 跨领域发言是 A4,无名用户贴出政府统计原文可以是 F1。

完整判据见 references/source-grading.md。

另有三个标记:✅ 多源独立 / ◐ 部分印证 / ⚠️ 单一来源; 缺口三类在表里带不同边框。全部含义都在报告顶部那块口径里。


快速开始

git clone https://github.com/DavidLearning1023/bilibili-info-gathering.git
cd bilibili-info-gathering
python scripts/install_mcp.py --with-docs   # 建 venv + 装依赖 + 注册 MCP + 自检,一步到位
                                            # 去掉 --with-docs 也能用,只是不出 HTML/PDF

要求 Python ≥ 3.10;要取字幕还需登录态(扫码一条命令,见 INSTALL.md §2.4)。 装完有两个入口:

命令

用途

big

命令行:big scan / big video / big registry / big setup

big-mcp

MCP server(stdio)

验一下装对了没有:

python scripts/check_setup.py

它不 mock——会真起一个 stdio server 握手、核对 14 个工具、再跑一次真实联网搜索。 看到这一行就是好了:

结果: [OK] 17 项  [WARN] 0 项  [FAIL] 0 项

完整安装说明见 INSTALL.md:客户端配置写到哪、登录态怎么配、 维护者怎么用 junction 直连开发、以及那五个不能删的 env 变量。

scripts/install_mcp.py 会自动写好。需要手写时,结构如下:

{
  "mcpServers": {
    "bilibili-info-gathering": {
      "type": "stdio",
      "command": "<装好的目录>/.venv/Scripts/python.exe",
      "args": ["-m", "big.mcp_server"],
      "env": {
        "BIG_OUT_DIR": "<装好的目录>/.bigout",
        "BIG_REGISTRY_DIR": "<装好的目录>/.registry",
        "PYTHONPATH": "<装好的目录>/src",
        "PYTHONIOENCODING": "utf-8",
        "PYTHONUNBUFFERED": "1"
      }
    }
  }
}

env 那五项不是可选项:客户端启动 stdio 子进程时未必带 cwd, 而图片目录与资产库路径依赖锚定;编码与缓冲两项则是 Windows 管道下的实测坑。 路径示例是 Windows 的 .venv/Scripts/python.exe;macOS / Linux 换成 .venv/bin/python。 详见 INSTALL.md 第四节。


14 个工具

工具全部走 MCP,不做判断。判断在哪一步做、用什么标准,见 SKILL.md。

工具

用在哪

说明

scan_topic

阶段 1 入口

多关键词搜索 → 去重 → 排序 → 头部候选拉评论,一次调用替代几十次

search_videos

补搜

单词族试探

deep_read

阶段 2 主力

一次调用聚合四通道:字幕 + 评论 + 弹幕 + 封面,深挖不必逐个试

get_transcript

只取字幕时

支持「只读前 20%」与「关键词定位」,省 80–95% token

get_comments

观点分布

三档 detail:opinion(只取顶层,省 71%)/ brief / full;定性、挖评论区也用它,附评论区结构指标

get_danmaku

位置信号

密度曲线 / 高重复句 / 披露线索

get_comment_images

读图

阈值判读 → 下载 → 联系表(带编号,按号回读原图)

transcribe_audio

无字幕时的补路

下载音轨 → 本地 ASR 自建转写。没有后端时返回可执行的安装指引,不静默失败

grab_frames

字幕错误时的核对

段级抽帧(只给时间点,不抽全片)+ 联系表 + 定位自检

get_metadata

兜底

广扫用不到(搜索结果自带元数据),只在需 cid 时用

get_creator_content

判断搬运

查 UP 主作品列表 / 合集,比对原作者的 mid

scan_untrusted_text

评论区加固

扫描提示词注入风险,标 injection_risk(命中 ≠ 这条在攻击你)

registry_get

资产积累

读信源库 / 视频索引 / 经验库 / 调用账本

registry_upsert

资产积累

写信源库 + 视频索引 + 经验库 insights(跨议题认知,越用越准)+ 调用账本(kind="cost")


三阶段流程

阶段 0  议题定义   核心问题 / 关键词族 / 纳入排除 / 预算
阶段 1  广扫       scan_topic 一次调用 → 20–40 条候选 + 头部评论摘要
                   ⛔ 不拉字幕(这是"能广"的唯一原因)
阶段 2  定向深挖   8–12 条(L3 另加 15–25 条 + 30–40 份画像):字幕、弹幕、评论区图片
阶段 3  综合       交叉验证 / 冲突单列 / 结论 / 缺口声明

两种议题,两套判据

阶段 0 必须先问清意图,这不是礼貌问题——猜错会让整套流程朝反方向优化:

态度类(what / why)

方法类(how)

典型问法

「大家对 X 怎么看」

「X 到底该怎么做」

点赞率

反指标(火的通常最好消化,不是最有料)

正指标

评论区

主证据(常与视频立场相反)

辅助

高赞图片

多为梗图,只能当情绪证据

多为截图实测,可当一手材料

结论形态

阵营表(谁说什么、各占什么位置)

方案对比表

详细规则见 SKILL.md 与 references/。

  • 不做跨议题的 UP 主横向对比(同一批人在不同议题上的表现)——简报的目的是理解这一个议题

  • 不做单条视频的深度拆解(那是 bilibili-video-analysis-summary 的事。 本项目的 HTML/PDF 是议题简报的排版形态,不是视频分析报告)

  • 不绕过登录、付费、地区限制


实测:同一议题,深入 vs 简要

同一天、同一个议题(「社区对 AI 模型娘化与各类二创的热衷」)分别用 L2 与 L1 各跑了一次, 数字来自调用账本 registry_get(kind="cost", window="runs"),可复现:

L2 深挖

L1 速览

深挖条数

7 条(全部由子代理读)

3 条(只读评论,不读字幕/图)

工具调用

43 次

11 次

上游请求

323 次

71 次

输出估算

94,916 token

28,611 token

产物

38 KB md / 73 KB HTML / 20 页 PDF

22 KB md / 46 KB HTML / 12 页 PDF

主动交代的缺口

7 类(含「鱼灾」无法量化这类结构性边界)

5 类

这两轮也暴露了四个真问题(后来都修了,见 references/CHANGELOG.md v1.0.0): 测试往真实账本里记账(116 行假数据)、单轮开销低报 6.8%、简要轮覆盖深入轮的视频记录、 同一议题两轮 14 条可比 BV 里 10 条评级不一致。

换句话说:工具已经能产出可用的报告,但「数字自洽」需要专门验收。 现在这几条都由测试和 --check 兜住了,不再靠人眼。

原始设计假设「每条候选要单独调一次元数据接口」,于是 20 条候选 ≈ 60–90 次调用, 预算被元数据吃光。实测发现 /x/web-interface/wbi/search/type 返回的每条记录自带 aid / mid / 播放 / 弹幕数 / 评论数 / 收藏 / 标签 / 简介,且 page_size 上限是 50。

原设计

现在

元数据

每条 1 次调用

0 次(随搜索返回)

20 条候选的定性

约 60–90 次调用

约 13 次

单次搜索覆盖

10 条(某 MCP 工具的 schema 限制)

50 条

省下来的预算不是攒着,而是换成了更多的样本和更深的评论。


隐私与合规

  • 本工具只访问公开可见内容:视频元数据、公开评论、公开弹幕、公开字幕。 不绕过付费、大会员、地区限制或私密内容——读不到就是读不到。

  • 默认不内置任何凭据。取字幕需要你自己的登录态,通过环境变量 BILI_SESSDATA 或本地文件提供,不写进仓库。

  • 评论里的 IP 属地、昵称、mid 属个人信息。默认只做聚合统计; 产物若要对外分享,请去掉 IP 属地分布这类字段。

  • .registry/ 存的是你自己的使用积累,已在 .gitignore 里,不要提交。

  • 请求默认限速 400ms(BIG_RATE_LIMIT_MS)。调快是你自己的选择,412 是 IP 级风控, 换凭据没用。

免责声明:本项目与哔哩哔哩无任何关联,非官方工具。仅供个人研究与学习使用。 请自行确认你的使用方式符合《哔哩哔哩用户协议》与当地法律;请勿用于商业用途或 大规模数据抓取。相关风险分析见 RISK.md。


已知限制

限制

影响

搜索结果是算法排序,不是随机抽样

样本永远有偏,必须在结论里声明(工具会返回 bias_note)

楼中楼每层最多取 3 条

深层争论看不到;reply_intensity 用真值 rcount,不受影响

弹幕无法识别发送者

「p[6]=crc32(uid)」已实测否证,只做内容启发式

字幕多为 AI 字幕

不可当引用,只用于定位;术语错一个后面全错

本地 ASR 要自己装

可选能力,不装只是无字幕视频转不了;共享运行时是加速路径不是依赖

接口随时可能变

412 / 字段改名会静默降级,见 references/troubleshooting.md

同一视频两次分析的评级可能不同

来源字母(A–F)有规则约束 + --check 跨报告提醒;可用度数字相对议题与证据深度,本来就会变(深入 D2 vs 简要 C2 不一定是错)

「单轮开销」是输出侧估算

用于横向比较(深入 vs 简要、哪个工具最费),不是账单金额:它不含输入侧 token,也没乘单价

L1 不读字幕/图

结论偏「评论区侧」;涉及「视频说了什么」的判断只能记为缺口,不能补脑


文档索引

文档

什么时候看

INSTALL.md

装不上、想让 Agent 认这个 skill、维护者怎么开发、本地 ASR 怎么装

SKILL.md

Agent 的判断层规则(三阶段流程、双轴评级、离场规则)

RISK.md

风险与合规边界(用之前建议读一遍)

CONTRIBUTING.md / English

想参与贡献(开发环境、测试、commit 规范、PR 自查表)

SECURITY.md / English

安全边界与漏洞报告方式(安全问题不要开公开 Issue)

examples/

一份完整产物的 HTML 渲染样例

references/mcp-tools.md

14 个工具怎么用、参数怎么定、哪些坑

references/search-protocol.md

关键词族怎么设计(阶段 0 决定成败)

references/source-grading.md

双轴分级卡、冗余度标记

references/exit-rules.md

什么时候该停手(列表级 / 内容级 / 议题级)

references/opinion-distribution.md

评论区观点分布:三轴、四型贴法、偏差声明

references/context-isolation.md

上下文隔离:子代理读原文、只回传摘要的契约与降级路径

references/subtitle-reliability.md

字幕能信到什么程度、ASR 后端怎么找、什么时候该抽帧

references/briefing-template.md

情报简报骨架与输出格式

references/registry.md

信源库 / 视频索引的数据结构与维护

references/troubleshooting.md

取数出问题了先查这里

references/audience-profiles.md

这个 skill 服务谁、不服务谁、企业级场景推演

references/CHANGELOG.md

变更历史(每个坑的来龙去脉都在里面)


参与与反馈

这个项目只有一个人维护,所以下面几件事对你来说比对我更有价值:

  • ⭐ Star 一下——不是虚荣心,是让 GitHub 的算法把它推给需要它的人

  • 🐛 提 Issue——取数出问题了、评级判据有异议、想要某个议题类型的方法论,都请开 issue

  • 💡 贡献方法论——references/ 里的判据(双轴评级、离场规则、观点分布)都可讨论; 改判据请在 issue 里先讲理由,别直接改

  • 🔍 交叉验证——如果你拿它跑出了与我不同的结论,那多半是我错了,请贴上来

姊妹项目:bilibili-video-analysis-summary ——单条视频精读,与本项目共用同一套取数层。

完整的贡献流程(开发环境、测试命令、commit 规范、PR 自查表)见 CONTRIBUTING.md; 发现安全问题请不要开公开 Issue ⇒ 见 SECURITY.md。


License

MIT。见 LICENSE。

Available Tools

14 tools
deep_readA

一次调用聚合多条通道:字幕 + 评论 + 弹幕 + 封面(可选抽帧)。

为什么要有它

本项目有 5 条取数通道,但每条要单独一次调用:Agent 要自己编排、 每次都要重新拼参数、而且每条通道都要先拉一次视频元数据。 DSH 那边的实现把多路整合成"一次看懂"(字幕/弹幕/热评/封面/抽帧)。 本工具是同构的等价物:少几轮往返,且一次拿到各通道的统一降级信号。

channels(默认 ["transcript","comments","danmaku","cover"]): transcript 字幕(受 transcript_query / transcript_head_ratio / transcript_max_chars 控制) comments 评论(受 comment_n / comment_detail 控制) danmaku 弹幕(密度与披露线索) cover 封面 URL(批次 C3 放回来的 pic,成本最低的一路) frames 抽帧(只在给了 frames_at 时才做;需要 ffmpeg)

返回:{bvid, title, channels: {...}, degraded: [...], ok, cost} 每条通道的完整载荷在 channels.<name> 里,与单通道工具同构—— 所以 deep_read 的结果可以直接当单通道结果用,不会出现"两套结构"。

⚠️ 成本:一次调用可能打多次上游(cost.calls 会告诉你实际打了几次)。 字幕仍是最大头——强烈建议给 transcript_query 或 transcript_head_ratio。

NameRequiredDescriptionDefault
bvidYes
pageNo
qualityNo
channelsNo
comment_nNo
frames_atNo
comment_detailNoopinion
transcript_queryNo
transcript_max_charsNo
transcript_head_ratioNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations present, the description carries the burden well: it discloses that one call may hit upstream multiple times (cost.calls), that frames requires ffmpeg and only runs when frames_at is supplied, which channel is cheapest, and that degraded[] reports per-channel failures. Missing richer detail on failure modes or permissions, but the behavioral picture is above average.

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

Conciseness4/5

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

The channel breakdown is front-loaded and scannable, with the cost warning placed at the end for emphasis. The '为什么要有它' paragraph adds some narrative padding and an external DSH comparison that an agent doesn't strictly need, but structure remains tight enough.

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

Completeness4/5

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

For a 10-parameter aggregator with an output schema, the description covers the mechanics an agent needs: channel selection, per-channel knobs, degradation handling and cost. The unexplained page and quality parameters are the notable gap, since the output schema does not cover request-side semantics.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate, and it does map most controls to their channels: transcript_query/transcript_head_ratio/transcript_max_chars for transcript, comment_n/comment_detail for comments, frames_at for frames. However it leaves page and quality entirely unexplained and gives no value semantics for comment_detail beyond the raw default.

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

Purpose5/5

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

The description gives a specific verb-and-resource statement (aggregating transcript, comments, danmaku, cover and optional frames in a single call) and explicitly positions it against the single-channel siblings by saying results are structurally identical to them. An agent can distinguish it from get_transcript/get_comments/get_danmaku without opening any schema.

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

Usage Guidelines4/5

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

It explains the selection rationale clearly: use it to cut round trips and obtain a unified degradation signal rather than orchestrating the five channels separately. It also names a concrete cost-avoidance recommendation (supply transcript_query or transcript_head_ratio). It stops short of an explicit 'use X instead when' rule for the lightweight single-channel case.

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

get_comment_imagesA

评论区图片:阈值判读 → 并行下载 → 拼成带编号的联系表,返回格号清单。

top_n=0 时按阈值自动:图片占总赞 ≥15% 下 20 张,≥5% 下 10 张,低于 5% 直接跳过。

用法:先看联系表整版(一次视觉扫描,判断哪几格有信息量),再按 #编号回读原图。 数字与结论只认原图——缩略图只用于定位,不能作为引用依据(长图尤其)。

NameRequiredDescriptionDefault
bvidYes
top_nNo
commentsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full disclosure burden. It does so well by disclosing the threshold-based auto-download logic, the skip behavior below 5%, the contact-sheet composition, and the caveat that thumbnails are only for locating and not for citing numbers or conclusions. It does not cover permissions, rate limits, or error behavior.

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

Conciseness4/5

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

The text is front-loaded with the purpose, then the threshold rules, then the usage workflow and the thumbnail caveat. It is compact and nearly every sentence carries useful information, though the formatting is slightly dense.

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

Completeness4/5

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

For a three-parameter tool with an output schema and no annotations, the description covers the core workflow, the output shape at a conceptual level, and the key caveat about using original images. Its main omission is that bvid and comments remain semantically undocumented.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains top_n=0 and its threshold-based behavior in detail, including the 15% and 5% rules. However, it does not explain bvid or the comments parameter, and it leaves positive top_n values unexplained.

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

Purpose4/5

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

The description clearly states that this tool handles comment-section images: it judges them against a threshold, downloads them in parallel, creates a numbered contact sheet, and returns a grid-number list. That is a specific verb-and-resource purpose, but it does not explicitly distinguish this tool from siblings such as get_comments or grab_frames.

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

Usage Guidelines4/5

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

It gives clear context for when to use the tool and how to use it: check the contact sheet first, then read the original images by #number. It also explains the automatic threshold behavior when top_n=0. It does not explicitly state when not to use it or name a competing alternative.

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

get_commentsA

取顶层评论 + 评论区结构指标。

detail 三档,按成本递增:

  • "brief"(默认,广扫用):前 n 条顶层,正文截断 90 字,~4.3k token/100 条

  • "opinion"(观点分布用):前 n 条顶层 + 完整正文 + 最小字段集 (text/likes/rcount/author/lv/pics),~7.2k token/100 条。 只取顶层就够算三轴——争议度用的 rcount 只存在于顶层。 比 full 省 71%,且正文不截断(不毁观点簇判断)

  • "full":全部原始字段(含楼中楼、pictures URL 明细),~25.3k token/100 条。 只在要引用原话、或要读楼中楼争论内容时用

stats 里的关键量(判读口径固定在前 100 条顶层,不随 n 漂移): picture_like_share 「图片评论占总赞」——决定要不要读图(≥15% must,≥5% sample) reply_intensity 平均每层楼中楼数 —— 争论强度(点赞是"认同",回复是"争议") reply_to_like 楼中楼总数/赞总数 —— 评论活跃度 level_count 等级分布 —— 社区结构(高等级占比高 = 老用户为主) locations IP 属地分布 —— 地域结构,属于个人信息,不要写进可分享的产物

n 是顶层评论条数上限,楼中楼不占名额。n<100 时 picture_verdict 不返回(口径不可比)。

sanitize(默认 "flag"):给命中指令注入特征的评论追加 injection_risk 字段。 只标记、不删改原文——删改会破坏可溯源性(报告要能引用原话)。 设 "off" 可关闭。实测 B 站评论区存在成规模的、专门针对 AI 账号的注入。

⚠️ 命中不等于"这条在攻击 Agent":本检测是纯关键词匹配, 只能当"值得再看一眼"的提示,不能当证据。

NameRequiredDescriptionDefault
nNo
bvidYes
detailNobrief
sanitizeNoflag

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so well: it discloses token costs, body truncation, returned field sets, default sanitize behavior, injection-risk marking semantics, and the privacy warning for locations. It also warns that keyword injection hits are only hints and not evidence.

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

Conciseness5/5

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

The description is long but front-loads the core purpose and structures the cost/field tradeoffs as bullets. Every major section carries operational value: mode selection, stats semantics, privacy handling, and injection caveats.

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

Completeness5/5

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

Although there is an output schema, the description still supplies essential context for interpreting the modes, stats metrics, n limitation, and sanitize behavior. For a complex comment-reading tool with four parameters and zero schema coverage, it is complete enough to call correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate; it explains n as a top-level comment cap that excludes nested replies, and it defines the detail and sanitize modes despite no enums in the schema. However, the required bvid parameter is not explained at all.

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

Purpose4/5

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

The opening states a specific verb and resource: it retrieves top-level comments plus structural metrics for the comment section. The three detail modes are clearly differentiated, but the description does not explicitly distinguish this tool from siblings such as get_comment_images or scan_untrusted_text.

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

Usage Guidelines4/5

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

It gives clear when-to-use guidance for each detail mode, including 'brief' for broad scanning, 'opinion' for opinion distribution, and 'full' only for quoting originals or reading nested replies. It also explains the n<100 limitation and sanitize='off', but does not name sibling alternatives for overlapping needs.

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

get_creator_contentA

UP 主通道:档案 / 投稿列表 / 合集 / 系列 / 动态。

为什么需要这条通道

议题收敛到 2–3 个核心 UP 之后,"这个 UP 后续又发了什么"是自然的下一步追问。 本项目原来没有这个能力——只能反复 search_videos 搜关键词, 但搜索是按内容召回的,召回不到"某人后来发的某条"。

section: "overview" UP 档案(昵称/签名/等级/粉丝数/认证) "videos" 投稿列表(按 order 排序,order 可选 pubdate / click / dm) "collections" 合集(season) "series" 系列(series) "dynamics" 动态流(最近发的动态,含视频引用)

⚠️ 端点可用性(2026-10-21 本机实测):space 系列端点必须带 WBI 签名, 不带就是 -799「请求过于频繁」。合集/系列的正确路径是 /x/polymer/**web-space**/seasons_series_list(polymer/space/... 是 404)。

NameRequiredDescriptionDefault
midYes
pageNo
orderNopubdate
sectionNooverview
page_sizeNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

No annotations exist, so this carries the full load, and it does disclose meaningful operational traits: space endpoints require WBI signing, unsigned calls return -799 'too many requests', and the correct seasons_series_list path. It omits pagination behavior, upper limits, and whether calls are purely read-only.

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

Conciseness3/5

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

The section list is front-loaded and useful, but the '为什么需要这条通道' motivation paragraph and emoji-heavy formatting consume space without helping invocation. The endpoint-path caveat is valuable but buried at the end.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the section enumeration adequately covers what the agent will get back. Remaining gaps are the pagination contract (page/page_size interaction) and what mid actually identifies.

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

Parameters3/5

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

Schema description coverage is 0% with 5 parameters, so the description must compensate. It does well on section (five named values with meanings) and order (pubdate / click / dm), but says nothing about mid identity, page, or page_size semantics.

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

Purpose5/5

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

States a specific verb+resource (fetch an UP creator's profile/works/posts) and enumerates the five section values with a short gloss for each. It also distinguishes itself from search_videos by explaining that search recalls by content and cannot retrieve 'what a given person posted later'.

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

Usage Guidelines4/5

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

Gives an explicit use case (after narrowing a topic to 2-3 core creators, ask what they posted next) and names the alternative (search_videos) plus why it fails there. No when-not-to-use or prerequisite/rate-limit guidance beyond the endpoint warning.

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

get_danmakuA

取弹幕并压成"位置信号":密度曲线、最密时段+样本、高重复句、披露关键词。

为什么值得单独一条通道:弹幕是秒级的,能直接对上口播段落;评论只有发表时间。 而且广告披露常常只在弹幕里(实测某期简介无标注,弹幕 t=635s 直接写了"本期推广…")。

用途限制(重要):只用在两处—— ① 「延伸发散」:某段弹幕密度暴涨,往往就是观众认为信息量最大的地方; ② 「评论区结构性偏差」:弹幕 vs 评论说的事不一样,说明受众分层。 不要为它单开一章,也不要拿弹幕当"多数人意见"的证据(弹幕是即时反应,不是判断)。

page:多 P 视频取第几部分(默认 1)。越界明确报错,不静默回落到 P1。

NameRequiredDescriptionDefault
topNo
bvidYes
pageNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations exist, so the description carries the burden. It usefully discloses one behavioral trait beyond the schema — out-of-range page raises an explicit error rather than silently falling back to P1 — and states that output is a compressed summary, not raw danmaku. However it says nothing about volume, rate limits, or what happens with empty danmaku streams, and an output schema already covers the return shape.

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

Conciseness4/5

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

Front-loaded with the action and output, then rationale, then constraints. The rationale section is somewhat editorial and could be tightened, but every paragraph maps to a decision the caller must make.

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

Completeness4/5

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

Return values are covered by the output schema, and the description adds scope restrictions and error behavior, which is what an agent most needs for a focused analysis tool. The gap is that 'top' is undocumented, leaving one of three parameters opaque.

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

Parameters3/5

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

Schema coverage is 0% and there are 3 parameters, so the description must compensate. It does well for page (multi-P selector, default 1, hard error on out-of-range), but 'top' (default 5) is never explained and bvid is left implicit. Partial compensation only.

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

Purpose5/5

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

Names a specific verb and resource (get danmaku) and immediately enumerates the derived outputs: density curve, densest segment with samples, high-repetition lines, disclosure keywords. It also explicitly contrasts itself with get_comments (second-level timestamps vs publish time), so an agent can tell them apart without opening the schema.

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

Usage Guidelines5/5

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

Gives an explicit two-item allowlist of use cases (extension divergence, comment-section structural bias) plus two explicit prohibitions: don't create a dedicated chapter, don't treat danmaku as majority opinion. That is when-to-use, when-not-to-use, and the alternative (get_comments) in one place.

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

get_metadataA

批量取完整元数据(含 cid/pages、标签、简介全文)。

⚠️ 广扫阶段不需要它——搜索结果已经带了元数据。只有这两种情况用: ① 你只有一个 BV 号,没有搜索结果; ② 需要 cid 去拉字幕/弹幕(get_transcript / get_danmaku 内部已自动处理,通常也不用)。

🔴 分 P 视频必看:返回里的 n_pages 是分P总数,pages 是完整分P清单 (每项含 page / cid / title / duration)。n_pages > 1 时, 取字幕/弹幕/ASR/抽帧都要显式传 page=,否则默认只读第 1 部分。 pic 是封面图 URL(批次 C3 放回来的)——最便宜的一手形态信息。

NameRequiredDescriptionDefault
bvidsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations, so the description carries the load and does disclose a real behavioral trap: for multi-part videos (n_pages > 1) downstream tools read only part 1 unless page= is passed explicitly. It doesn't mention batch-size limits, failure modes for invalid BV ids, or rate/cost constraints, which keeps it short of a 5.

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

Conciseness4/5

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

Front-loaded with the core purpose, then warnings, then field semantics — good ordering. Some internal jargon ("批次 C3 放回来的", "最便宜的一手形态信息") is noise, and emoji-heavy emphasis inflates length slightly, but no sentence is purely redundant.

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

Completeness4/5

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

Output schema exists, yet the description still usefully explains the most consequential return fields (n_pages vs pages, per-page cid). Combined with the usage routing, an agent has what it needs; only batch-size/error behavior is missing.

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

Parameters3/5

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

Schema coverage is 0% for the single required 'bvids' parameter, and the description only indirectly reveals it takes BV ids ("你只有一个 BV 号"). It adds no detail on array size limits, ID format, or whether non-BV ids are accepted, leaving a real gap for the only input.

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

Purpose5/5

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

Starts with a specific verb+resource: batch-fetch complete metadata (cid/pages, tags, full description). It explicitly contrasts itself with the broad-scan path (search results already carry metadata), so an agent can distinguish it from search_videos/scan_topic without reading schemas.

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

Usage Guidelines5/5

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

Gives an explicit when-not (broad scanning doesn't need it) followed by two enumerated when-to-use conditions: you have only a BV id, or you need a cid — and it even notes that get_transcript/get_danmaku handle cid internally. That is the strongest form of routing guidance.

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

get_transcriptA

取字幕,默认带压缩——这是阶段 2 里最容易把上下文打爆的一步。

三种用法,按成本从低到高: head_ratio=0.2 只读前 20%(离场规则的判断依据:核心关键词还没出现就退出) query="关键词" 只返回命中句 ±2 句上下文(省 80–95% token,优先用这个) 都不给 返回全量(长视频会非常贵,慎用)

返回 data_source 字段: "subtitle" 人工 CC —— 可以当引用 "ai_subtitle" AI 字幕 —— 不可当引用。技术类视频术语错一个,后面所有推论 都建立在错的前提上。用它定位、不用它举证。

page:多 P 视频取第几部分(默认 1)。越界会明确报错,不会静默回落到 P1。 分P数 > 1 时返回里带 degraded 说明"本次只读了第几部分"。

NameRequiredDescriptionDefault
bvidYes
pageNo
queryNo
max_charsNo
head_ratioNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses the default compression behavior, the citation-safety distinction between 'subtitle' and 'ai_subtitle', and explicitly states that an out-of-range page raises an error rather than silently falling back to P1. The 'degraded' field for multi-part videos is also disclosed. It stops short of covering permissions or rate limits, which keeps it from a 5.

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

Conciseness4/5

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

The cost ordering is front-loaded and the three usage modes are laid out as a scannable list. Heavy bold/emphasis markup and the opening warning take up space that could be tighter, but every section conveys actionable information rather than filler.

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

Completeness4/5

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

An output schema exists, so the description needn't document return shape, yet it usefully explains the two highest-stakes return fields (data_source and degraded). Combined with the mode guidance, an agent has nearly everything needed — the unmentioned max_chars is the one remaining hole in a 5-parameter tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate, and it explains query, head_ratio, and page with real semantics (query = hit sentence ±2 context; page = which part of a multi-P video). However, max_chars (default 8000) is never mentioned at all, despite being the parameter that governs the cost tradeoff the description is built around — a notable gap.

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

Purpose4/5

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

The description states a specific verb plus resource ('取字幕' — fetch the transcript) and immediately flags its default behavior (compression on). It implicitly distinguishes itself from transcribe_audio by framing itself as retrieval of existing subtitles with a data_source provenance field, but it never names that sibling or explicitly contrasts the two.

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

Usage Guidelines5/5

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

It enumerates three usage modes in ascending cost order, gives a concrete value for each (head_ratio=0.2, query="关键词"), and states which one to prefer ('优先用这个'). It also warns when not to use the full-fetch mode ('长视频会非常贵,慎用'), which is exactly the when/when-not guidance an agent needs.

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

grab_framesA

按需抽帧:只在字幕出现「明显影响理解且无法纠正」的错误时用。

什么时候用

字幕/口播里出现数字、专有名词、参数名,且这个错会改变结论—— 不是"可能读错",是"读错了我就没法下判断"。这时抽该时间点附近的一张 画面确认。数字以画面为准,不以逐字稿为准。

⛔ 不要全片抽帧。 全片抽帧产出的是"我看过这个视频", 不是"我核对了这个数字"。先用判据筛,命中才抽。

quality:720 看画面结构够用;要读表格/榜单里的数字必须 1080 (实测 640×360 只能认出几个大字,格子里全是糊的)。

page:多 P 视频抽第几部分(默认 1)。视频流缓存按分P分目录, 否则抽 P2 会复用 P1 的视频流,抽出来的画面根本不是那一段。

需要 ffmpeg。没装时返回明确指引,不静默失败。

返回 {sheet, grid[]}:grid 里每项含 #编号 / sec / ts / file, 按编号回读原图取数字(联系表只用于定位)。

NameRequiredDescriptionDefault
bvidYes
pageNo
qualityNo
at_secondsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so well: it discloses the ffmpeg dependency, non-silent failure behavior, page-cache separation for multi-part videos, quality limitations for reading numbers, and the returned {sheet, grid[]} structure.

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

Conciseness4/5

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

The content is front-loaded and organized with clear sections, and most sentences earn their place. Some warnings and emphasis are repeated, making it slightly longer than necessary.

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

Completeness5/5

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

For a frame-extraction tool with no annotations and an output schema present, the definition provides enough context to call it correctly: trigger conditions, quality guidance, multi-part handling, dependency behavior, and return-value interpretation.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It richly explains quality and page semantics, including practical consequences, and implies at_seconds usage around the error timestamp, but bvid and the exact array format of at_seconds are not explained.

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

Purpose5/5

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

The description states a specific action — extracting frames on demand — and sharply scopes it to cases where subtitle/transcript errors affect understanding. It also distinguishes the tool from the anti-pattern of extracting frames for the whole video.

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

Usage Guidelines4/5

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

It gives explicit when-to-use criteria (numbers, proper nouns, parameter names whose misreading changes the conclusion) and a clear when-not-to-use warning against full-video extraction. It does not explicitly name an alternative sibling tool, so it falls short of a full 5.

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

registry_getA

读资产库。每次任务开始前先查一遍——已有评级的 UP 主直接沿用。

kind: "stats" 总览(条数、评级分布、评级变动、议题分布、经验库体积、议题档案数、 上一轮开销、报告库概览) "source" 按 mid 查单个 UP 主(需 mid) "video" 按 bvid 查单条视频(需 bvid,返回历史 key_findings,避免重复分析) "sources" 列表(可按 domain 过滤) "videos" 列表(可按 topic 过滤) "insights" 读经验沉淀(跨议题的领域/信源/方法认知)。给了 topic 就只看该议题 "topic" 读议题档案(需 topic 名):核心问题/已搜方向/已覆盖/缺口/未收敛冲突/ 用户采纳了什么/下次从哪切入——跨任务记忆与反馈闭环的落点 "topics" 列出全部议题档案 "protocol" 读检索协议(需 topic 名):阶段 0 的产物落盘, 报告 §五「检索范围与偏差声明」从这里读出来,不手写 "protocols" 列出全部已落盘的协议 "clusters" 读某议题的观点簇(需 topic):归簇结果落盘,供复核 "staging" 看暂存区里有什么(写侧闸门:commit 之前正式库不会被改动) "cost" 调用账本汇总。window="run" 只看本轮(需先用 registry_upsert(kind="run-start") 打标记); 返回里的 md_line 可直接贴进报告 §五「单轮开销」;closed=true 表示这一轮已收尾、数字不会再变

⚠️ est_output_tokens 是输出侧粗估(CJK×0.7 + 其它×0.25), 用于横向比较"哪个工具最费、这一轮跑了几次",不是账单金额。

NameRequiredDescriptionDefault
midNo
bvidNo
kindNostats
topicNo
domainNo
windowNoall

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and largely meets it: it explains that `staging` is the write-side gate (the formal library is untouched before commit) and that `cost` with `window="run"` requires a prior `registry_upsert(kind="run-start")` marker, plus `closed=true` semantics. It also disclaims that `est_output_tokens` is a rough output-side estimate, not a billing figure. It does not state size/volume limits for the list modes.

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

Conciseness4/5

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

The most important instruction (query the registry at task start) is front-loaded before the long `kind` enumeration, and the enumeration is formatted so an agent can scan for the mode it needs. It is long, but the length is justified by 13 modes; the trailing `est_output_tokens` caveat is the one part that reads as extra.

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

Completeness4/5

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

For a six-parameter multi-mode reader with no annotations, the description supplies mode semantics, param prerequisites, the write-gate distinction, and the run-marker dependency. An output schema exists, so return-value explanation is correctly omitted. Minor residual gaps are list-mode volume/pagination behavior.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it effectively does: every parameter's role is covered — `mid` ("需 mid"), `bvid` ("需 bvid"), `topic` ("需 topic 名"), `domain` ("可按 domain 过滤"), `window` (`"run"` vs default). It does not state that `kind` defaults to `stats`, nor spell out the valid value set as an enum, but the mode list supplies the semantics.

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

Purpose5/5

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

The opening verb+resource ("读资产库") is followed by a complete enumeration of the 13 `kind` modes, each with a one-line scope note, so an agent knows exactly which sub-resource each call retrieves. It is clearly the read side of the registry, distinguishable from the sibling `registry_upsert` which is named explicitly in the `cost` and `staging` notes.

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

Usage Guidelines4/5

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

Gives explicit timing guidance ("每次任务开始前先查一遍——已有评级的 UP 主直接沿用") and a concrete motivation for `video`/`sources` lookups (avoid re-analyzing key_findings). It also states the prerequisite for `cost` (`window="run"` requires a run-start marker). It stops short of saying when to prefer sibling tools like `deep_read` or `scan_topic` over a registry read.

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

registry_upsertA

写资产库。每次任务结束必须调用,否则"资产积累"是空话。

kind="source":{mid, name, domains[], grade(A–F), grade_basis, notes} grade_basis 必须写依据,不写就等于没评级——半年后看到"A"也想不起为什么。 重复写入且评级变了,工具会自动追加一条 conflicts 记录。 kind="video":{bvid, title, mid, topics[], grade(如 A1/D4), redundancy(原创/冗余/冲突), key_findings[], transcript_pulled(bool), verdict} verdict 是一句话定性:这条在议题里是什么角色。 kind="insight":{section: "领域"|"信源"|"方法", text},需要同时给 topic。 这是"越用越好用"的真正来源:不是又一份报告,而是下次能直接用的判断。 写入标准只有一个——它对下一个议题有用吗?不会帮忙的就别写。 范例: 领域:「B站财经区的收益预期普遍锚在 8–10%,任何'提前退休'测算先查这个锚」 信源:「某 UP 的数据都是二手转述,引用前必须找他引的原报告」 方法:「热点词族会带入大量番剧分集,40 条候选里 12 条无效,需在阶段 0 预判」 kind="topic":{topic, core_questions[], searched_axes[], covered[], gaps[], open_conflicts[], user_adopted[], next_entry} 议题档案——跨任务记忆 + 反馈闭环。user_adopted 记录用户在本议题上 采纳了哪些发现(等价于"你点了赞"),这样"下轮往哪深挖"就有外部信号。 kind="protocol":{topic, core_questions[], keyword_families[], include_criteria[], exclude_criteria[], budget{}, known_assets[], run_funnel{}} 阶段 0 的检索协议落盘。写进 .registry/topics/<议题>/protocol.md (+ protocol.sha256 版本账本 + run-<日期>.json 漏斗数字)。 报告 §五「检索范围与偏差声明」从这里读出来,不再手写。 升级规矩同 DSH 插件:你没改过就自动升级;改过就保留你那份、新版另存 protocol.md.new。 kind="cluster":{bvid, cluster(簇名), stance(一句话主张), member_rpids[], evidence[]("<赞数>赞/<楼层>楼|<原文摘录>"), axis{prevalence,agreement,controversy}(可选)} 需要同时给 topic。这是「去黑箱化」的落点: 归簇由你做判断(代码不聚类),但结果必须落盘——否则半年后 看到报告里的「A 派占据评论区最高赞」,既不知道由哪几条评论支撑, 也无法判断换个模型会不会归出别的簇。 落盘位置 .registry/topics/<议题>/clusters.json,主键 (bvid, cluster)。 读回:registry_get(kind="clusters", topic="…")。 kind="rejected":{bvid, title, grade, reason, stage?},需要同时给 topic。 报告 §6.3 的淘汰清单必须走这条入库——只写在报告里,下一轮就排不掉, 会把同一批候选重新扫一遍、重新分诊一遍。读回:registry_get(kind="rejected", topic="…"), 返回里的 exclude_bvids 可直接喂给 scan_topic(exclude_bvids=...)。 kind="commit":收尾时调用一次,把暂存区合并进正式库; 同时自动打 run-end 并回传 final_cost.md_line(最终单轮开销,此后不变)。 ⇒ 收尾顺序固定为:commit → 把 final_cost.md_line 贴进报告 §五 → 渲染。 kind="discard":丢弃暂存区(这轮白跑了,不要写进资产库)。 kind="run-start":阶段 0 结束时调用一次,在调用账本里打「本轮从这里开始」标记 (records 不用给)。零上游调用、零成本,但它是 registry_get(kind="cost", window="run") 能把这一轮与历史分开的唯一依据—— 没有它,「这轮花了多少」就永远算不出来,报告 §五 只能写"跑了很久"。 返回里的 run 是这一轮的编号。

🔴 写侧闸门(批次 C1):上面所有 kind 默认只进暂存区 (.registry/staging/),正式库在你调用 kind="commit" 之前不会被改动。 这是 DSH 插件「能力最小化」范式的等价实现:写侧始终可用(不打断"边挖边记"), 但碰不到正式库。收尾时 kind="commit" 一次合并,可预览、可回滚。 想看暂存区里有什么:registry_get(kind="staging")。

⚠️ 写入边界会做入参归一化:MCP 客户端层实测会把记录里的数组压成 {"item": X}、把布尔转成字符串、把整数转成字符串。工具会在落盘前还原, 所以 topics/domains/key_findings 一定是字符串列表、transcript_pulled 一定是布尔。 形状还原不了的(例如 topics 传成数字)会直接报错而不是静默写坏数据。

⚠️ kind="insight" 会做指令注入拦截:命中注入特征的条目被拒写, 并在返回的 injection_rejected 里说明原因。经验库是跨任务读取的, 写进去等于把注入持久化。改写成不含祈使句的判断句即可重试。

NameRequiredDescriptionDefault
kindYes
topicNo
recordsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and discloses the key behavioral traits: all writes go to staging and the formal registry is untouched until kind='commit'; commit can be previewed and rolled back; duplicate writes with changed grades append conflicts; protocol writes preserve user-modified copies as protocol.md.new; insight writes are scanned and rejected on injection signals; and records are normalized before persistence. These are meaningful behaviors beyond anything in the schema.

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

Conciseness4/5

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

The definition is front-loaded with purpose and the critical staging/commit gate, then uses kind-based bullets so an agent can scan to the relevant mode. It is long, but the length is largely justified by ten distinct record kinds and two cross-cutting warnings; a few rhetorical or emphatic phrases could be trimmed without losing information.

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

Completeness5/5

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

Given the tool's complexity, ten modes, absent schema descriptions, and no annotations, the description is complete enough to call correctly: it covers staging semantics, commit/discard lifecycle, run-start bookkeeping, per-kind payloads, normalization behavior, injection handling, and readback paths. An output schema exists, so the description reasonably does not need to enumerate return values in detail.

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

Parameters5/5

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

Schema description coverage is 0% and the schema exposes only kind, topic, and records, so the description must compensate, and it does: it defines all ten kind values and gives the expected record shape for source, video, insight, topic, protocol, cluster, rejected, commit, discard, and run-start records. It also clarifies when topic is required, that records are not needed for run-start, and that malformed topics/domains/key_findings will error rather than be silently written.

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

Purpose4/5

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

The description opens with a specific verb and resource, '写资产库', and enumerates ten record kinds, so the agent knows this is the write/upsert path for the registry. It refers to the readback sibling registry_get and to scan_topic, but never gives a single explicit contrast sentence such as 'use registry_get to read; use this to write staging records', leaving sibling differentiation partly implied.

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

Usage Guidelines5/5

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

Usage conditions are unusually explicit: call at the end of every task, call kind='run-start' once at phase 0 end, call kind='commit' once at wrap-up in the fixed commit → paste final_cost → render order, and use kind='discard' to throw away staging. It also states that rejected candidates must be recorded through this tool and names registry_get(kind='rejected')/scan_topic(exclude_bvids=...) as the downstream read/use path, so alternatives and timing are clear.

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

scan_topicA

阶段 1 广扫的唯一入口:多关键词搜索 → 去重 → 排序 → 对头部候选拉评论(含低成本判图)。

一次调用替代原来的「N 次搜索 + M 次元数据 + M 次评论」。返回: · candidates:全部候选的完整元数据 + 命中词族数 + 每千播放互动率 · digest:只有排序靠前的 comment_budget 条带评论摘要与评论区结构指标 · digest[].images:热评带图时的 160px 微表(判"这图是什么类型",读不出数字) · coverage:每个关键词命中数、去重后总数、跨词族命中数、样本偏差声明 · degraded / ok / cost:本次的降级信号、是否完整、以及实际开销

参数取舍: keywords 建议 4–6 个,覆盖 同义词/上位词/下位词/黑话/英文 五类 per_query 每个词取多少条(≤50;取 30 通常已进入长尾) comment_budget 花评论预算的条数。默认 12:再多也读不动,再少会漏掉侧面 comment_n 每条候选读多少条热门评论。默认 15——8 条看不到"高赞反方"这一层 image_policy "hot"(默认)热评里有图就判;"off" 最快;"all" 不论有没有都尝试 image_top 每条候选最多拼几张热评图,默认 6 families 强烈建议传:{"上位词": [...], "产品名": [...], "黑话": [...]}。 排序键会改成「命中的不同语义族数 → 族内命中数 → 播放量」。 不传时 kw_families 返回 null——代码无法凭空知道哪些词属于同一族。 pages_per_keyword 每个词翻几页。长尾在第 2 页——实测每词 page_size=30 时各命中 26–30 条,恰好卡在上限,长尾根本没取到。 min_play 排除播放量低于此值的候选(收窄候选池,不是扩大) published_after "YYYY-MM-DD",排除更早的内容(算法偏好新内容,"老"≠"好")

offset(批次 D2) 跳过排序后的前 N 条,取下一批。用来解决「召回 835 条、只返回 50 条」的断层: 候选池没变,只是分页看。coverage.next_offset 给了下一页的起点; coverage.rest_preview 是未展示候选的一行摘要(不含评论,成本≈0), 可以先扫一眼再决定要不要翻页。

exclude_topic(批次 D3 · 增量模式) 传议题名,自动把 .registry/videos.json 里该议题已登记过的 BV 排除。 同议题第二轮用它,避免把上次已分析的条目再扫一遍。 与 exclude_bvids 可叠加使用。

排序规则(传了 families 时,批次 D2):标题/简介强命中的不同族数 → 命中的不同族数 → 命中关键词数 → 字段权重 → 播放量(log)。 强命中族数是为了压掉「靠标签蹭进来」的候选——B 站搜索是模糊匹配, 标签沾边就能命中很多关键词。

NameRequiredDescriptionDefault
offsetNo
familiesNo
keywordsYes
min_playNo
comment_nNo
image_topNo
per_queryNo
image_policyNohot
exclude_bvidsNo
exclude_topicNo
comment_budgetNo
max_candidatesNo
published_afterNo
pages_per_keywordNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly: it discloses the returned buckets (candidates, digest, images, coverage, degraded/ok/cost), that degradation signals are surfaced, that a sample-bias declaration is included, that digest images are low-resolution 160px thumbnails unfit for reading numbers, and how ranking changes when families are supplied. Defaults come with rationale (e.g. 12 comment budget, 15 comments per candidate).

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

Conciseness4/5

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

Front-loaded with the one-line purpose and call-replacement claim, then organized into return-value, parameter, offset, exclusion and ranking sections. It is long and occasionally restates what the output schema already defines, plus it leans on internal jargon (批次 D2/D3) — but for a 14-parameter orchestration tool nearly every line carries decision-relevant information.

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

Completeness5/5

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

Covers the full lifecycle an agent needs: what the call does, how to tune cost versus coverage, how to paginate via coverage.next_offset and rest_preview, how to avoid re-scanning already-analyzed videos, and how the ranking differs with and without families. Even though an output schema exists, the extra explanation of degraded/cost/coverage makes the tool safe to invoke blind.

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

Parameters5/5

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

Schema description coverage is 0% across 14 parameters, so the description must compensate, and it does: it explains keywords (4–6, five semantic categories), per_query, comment_budget, comment_n, image_policy with its three values, image_top, families with its structure and consequence (kw_families returns null if omitted), pages_per_keyword, min_play, published_after format, offset, exclude_topic and exclude_bvids. Only max_candidates goes unmentioned.

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

Purpose5/5

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

States a specific composite action — multi-keyword search → dedupe → rank → pull comments for top candidates — and explicitly positions itself as the single entry point for broad Phase-1 scanning, replacing N searches + M metadata + M comment calls. This clearly separates it from siblings like search_videos, get_metadata and get_comments, which are single-step operations.

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

Usage Guidelines4/5

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

Gives rich usage guidance: when to use offset (recall/return gap), when to use exclude_topic (second round on the same topic, stackable with exclude_bvids), and when a filter narrows vs. widens the pool. It does not name sibling tools or a Phase-2 counterpart as explicit alternatives, so the routing information is implied rather than stated.

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

scan_untrusted_textA

注入检测(批次 C6 · 信任边界第二层):扫描任意外部文本。

为什么要有这个工具

前面所有通道的注入检测都发生在取数时。但有时文本不是从本项目取来的:

  • 别的 MCP 工具(上游 bilibili-mcp)返回的文本

  • 用户粘进来的网页/摘录

  • 你自己从别处复制的段落 这些都不经过 get_comments 的 sanitize ⇒ 不会被标记。 本工具让 Agent 能主动扫一遍。

⚠️ 命中不等于"这条在攻击 Agent":本检测是纯关键词匹配, 只能当"值得再看一眼"的提示,不能当证据。真正的判断要人/Agent 看原文。 误报是真实存在的(2026-10-21 实测:一条洛谷体长评因为「忽视」与「之前」 相隔很远而被独立匹配到一起,现已改成邻近匹配)。

返回:{n, flagged: [{index, risk, reasons, preview}], n_flagged, degraded}

NameRequiredDescriptionDefault
textsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses the detection method (pure keyword matching), the known false-positive mode and a fixed example, the degraded flag, and the return shape. It omits anything about size limits, cost, or performance for large batches, which is the remaining gap for a batch tool.

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

Conciseness4/5

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

Front-loaded with the action and the trust-boundary rationale before the motivation section. Some redundancy in restating that other channels sanitize, and the prose is longer than needed, but every block contributes actionable context rather than filler.

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

Completeness4/5

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

An output schema exists, yet the description still explains the result fields and their caveats, which is helpful for interpreting flagged results. For a one-parameter read-only scanner the coverage is nearly complete; only batch sizing and the meaning of the risk field's scale are unspecified.

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

Parameters3/5

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

Schema coverage is 0% for the single 'texts' array parameter, so the schema adds nothing. The description only indirectly conveys batch semantics via the return shape ({n, flagged:[{index, ...}]}), showing each input is scanned independently with per-item indices. It never states format, limits, or how previews are truncated.

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

Purpose5/5

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

States a specific verb+resource: scan arbitrary external text for injection. It explicitly contrasts itself with the fetch-time sanitization done by get_comments, so an agent can tell which channel handles which text without opening the schema.

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

Usage Guidelines5/5

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

Enumerates concrete trigger scenarios (text from upstream bilibili-mcp, user-pasted pages/excerpts, self-copied passages) and explains that these bypass get_comments sanitization, so they will not be flagged otherwise. It also sets an interpretation boundary: a hit is a 'look again' hint, not evidence, and false positives are real (with a dated example).

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

search_videosA

用一个关键词搜索视频,返回完整元数据(自带播放/弹幕/评论/收藏/标签,无需二次调用)。

用途:试探某个词族能覆盖多少样本;或在 scan_topic 之后补充搜索。 注意:limit 上限 50(上游实测值)。numResults 恒为封顶 1000,不能当总数用。 常规广扫请直接用 scan_topic,不要连这个循环调用。

NameRequiredDescriptionDefault
pageNo
limitNo
keywordYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations, so the description carries the load, and it adds real operational context: one-keyword restriction, the observed limit cap of 50, and the warning that numResults is a fixed ceiling of 1000 rather than a true total. It does not mention pagination behavior or how page interacts with limit, which is the remaining gap.

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

Conciseness4/5

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

Short, front-loaded, and each line carries a distinct instruction (what it returns, when to use, caps, what not to do). The numResults note is slightly opaque out of context and could be tightened.

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

Completeness4/5

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

An output schema exists so return values need not be described; the description still adds the useful ceiling caveat. Coverage is nearly complete for a 3-parameter search tool, with only page semantics missing.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains keyword (single keyword only) and limit (hard cap 50), but the page parameter is entirely undocumented in both schema and description.

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

Purpose5/5

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

States a specific verb and resource (search videos with exactly one keyword) and immediately scopes the return payload as full metadata that needs no follow-up calls. It also distinguishes itself from siblings get_metadata/scan_topic by naming the alternative explicitly.

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

Usage Guidelines5/5

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

Gives explicit when-to-use cases (probe an unfamiliar word family's coverage, or supplement after scan_topic) and explicit when-not-to-use (don't loop-call this for broad scanning; use scan_topic). Nothing is left to inference.

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

transcribe_audioA

没有字幕时的第三条路:下载音轨 → 本地 ASR 自建转写。

什么时候用

  • get_transcript 返回 transcript: null(无字幕)

  • 或字幕是 ai_subtitle 且错误多到不能作为依据

⚠️ 判「有没有字幕」必须带登录态:未登录时 B站返回空字幕列表, 看起来像"没字幕"(实测 6 个视频 + 195 个分P 全部返回空列表)。

转写引擎是使用者自备的(模型体积大,不进仓库)。 两种接法: ① pip install faster-whisper(首次会下模型,large-v3 约 3 GB) ② 设 BIG_ASR_CMD 指向你已有的转写命令(含 {audio} {out} 占位符) 两个都没有时,本工具返回 status="no_backend" + 完整安装指引, 并明确告诉你要把「该视频无可用字幕」记成结论里的缺口—— 不静默失败(静默失败会让 Agent 误以为"这视频没讲")。

返回结构与 get_transcript 一致(data_source="asr"),可直接接进后续流程。 ⚠️ 本地 ASR 同样会误转,处理标准与 AI 字幕完全一致(数字/术语要标注 "建议回原片核对"),并在引用时注明 engine(转写模型)。

page:多 P 视频转写第几部分(默认 1)。这个参数以前是假的—— 签名里收了 page 但实现里写死读 P1。现在按 page 取对应的 cid, 音轨缓存也按分P分目录(否则 P2 会复用 P1 的音轨,静默返回 P1 的转写)。

NameRequiredDescriptionDefault
bvidYes
pageNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full load: it discloses the backend must be user-supplied, the two setup paths, and that a missing backend yields status="no_backend" with install guidance rather than a silent failure. It also states the return structure matches get_transcript with data_source="asr" and that ASR output inherits the same verification caveats — leaving only minor gaps like latency/cost of a 3 GB model download beyond what's implied.

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

Conciseness4/5

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

Front-loaded with a bold one-line summary, then headed sections with bullets — good structure for a complex tool. The narrative about page previously being a no-op is somewhat verbose, though it does justify trusting the parameter now.

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

Completeness5/5

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

An output schema exists, so return values needn't be spelled out, and the description still links its output to get_transcript compatibly. Coverage of failure modes, backend prerequisites, login preconditions, and per-part caching is sufficient for an agent to invoke this correctly and interpret failures.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It does an excellent job on 'page' (multi-P selection, per-part audio caching so P2 doesn't silently reuse P1) but never explains 'bvid' at all. Half the parameters are documented, half are not.

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

Purpose5/5

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

States the operation precisely (download audio track → local ASR transcription) and positions it explicitly as the third path relative to get_transcript. An agent can distinguish this tool from get_transcript and grab_frames without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit trigger conditions: get_transcript returns transcript: null, or the subtitle is ai_subtitle with unacceptable error rates. Also adds a necessary precondition (must be logged in, otherwise the subtitle list is falsely empty) which prevents a whole class of misdiagnosis.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 14 tool updatesv1.0.1
    • First observeddeep_read
    • First observedget_comment_images
    • First observedget_comments
    • First observedget_creator_content
    • First observedget_danmaku
    • First observedget_metadata
    • First observedget_transcript
    • First observedgrab_frames
    • First observedregistry_get
    • First observedregistry_upsert
    • First observedscan_topic
    • First observedscan_untrusted_text
    • First observedsearch_videos
    • First observedtranscribe_audio

TDQS

A4.2/5.0

Scored across 14 tools

Disambiguation4/5

Most tools target clearly distinct resources (comments, transcript, danmaku, frames, creator content, registry, injection scan). The main overlap is deep_read acting as an aggregator over the single-channel tools (get_transcript, get_comments, get_danmaku, grab_frames), and search_videos vs scan_topic both retrieving candidate videos. Descriptions clarify intended use, so confusion is limited but still possible.

Naming Consistency5/5

All tool names use consistent snake_case verb_noun patterns (get_comments, search_videos, scan_topic, registry_upsert, transcribe_audio, grab_frames, etc.). No mixed casing or radically different naming styles. The pattern is predictable throughout.

Tool Count5/5

14 tools is well within the ideal 3-15 range for this domain. Each tool covers a distinct data channel or registry operation, and the set does not feel bloated. The count supports the multi-channel investigation workflow without excessive surface area.

Completeness4/5

The surface covers the core Bilibili info-gathering lifecycle: search, metadata, transcript, comments, danmaku, frames, comment images, audio transcription, creator content, registry read/write/commit/discard, topic scanning, and injection detection. Minor gaps exist, such as no direct creator/user search or dedicated deletion of individual registry entries, but agents can work around these. Overall the tool set is comprehensive for its stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables agents to search, explore trending content, retrieve video metadata and hot comments, and obtain subtitle transcripts for summarisation on Bilibili, with an anonymous tier and an optional account tier for personalized feeds.
    10
    4
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI coding agents to access Bilibili video data and turn videos into notes, including search, video info, subtitles, chapters, audio download, ASR transcription, comments, uploader collections, and favorites.
    15
    41 PyPI
    2
    MIT