dsh-bili-feed
把 B 站的热榜 / 搜索 / 视频详情 / 弹幕,做成 DeepSeek Harness(DSH)里可以直接调用的 MCP 工具。
不登录、不需要 Cookie、零依赖、不花钱。 一个文件几十行,装完 IDE 里就有 mcp__bili__* 五个工具。
Bilibili hot list / search / video detail / danmaku as MCP tools for DeepSeek Harness. No login, no cookie, no dependencies.
装
DSH 的插件是挂在某个 profile 上的。以 web profile 为例(Windows 下的默认路径是
%APPDATA%\dsh-desktop\harness\profiles\web):
-
在 profiles/web/package.json 的 dependencies 里加一行:
"dsh-bili-feed": "github:Doomsgeats/dsh-bili-feed"
-
在同一个文件的 dsh.profile.bundles 数组里加一项:
"dsh-bili-feed"
-
在 profile 目录里装依赖:
pnpm install
-
重启 DSH。之后模型就能看到 mcp__bili__bili_hot、mcp__bili__bili_search、
mcp__bili__bili_video、mcp__bili__bili_danmaku、mcp__bili__bili_week。
为什么是 bundle 而不是直接往 cordis.patch.yml 里抄一段配置:这个包里的
cordis.patch.yml 用 ctx.biliFeed.node / ctx.biliFeed.server 读自己装在哪,
所以仓库里没有写死任何绝对路径。你 clone 到 D 盘、C 盘、还是别的机器,都不用改配置。
环境变量(可选)
| 变量 | 默认 | 作用 |
|---|
BILI_MCP_SERVER | bili | 工具命名空间,最终名字是 mcp__<它>__<工具> |
DSH_BILI_NODE | 跑 DSH 的那个 node | 用哪个 node 起 MCP server |
用
装好之后,直接跟模型说话就行:
- 「B站今天有什么热的」→
bili_hot
- 「搜一下三角洲 S12 的新爆料」→
bili_search
- 「这个 BV 号播放多少、简介讲了什么」→
bili_video
- 「这视频弹幕都在刷什么」→
bili_danmaku
- 「每周必看这期有什么」→
bili_week
也可以完全不进 DSH,当命令行用(需要 Node ≥ 22):
node lib/bili.mjs hot 10
node lib/bili.mjs search "三角洲 新赛季" 1
node lib/bili.mjs video BV1GJ411x7h7
node lib/bili.mjs danmaku BV1GJ411x7h7 12
node lib/bili.mjs week
工具
| 工具 | 入参 | 返回 |
|---|
bili_hot | count 1–50,默认 12 | 综合热门榜:标题、UP主、播放量、时长、分区、BV号 |
bili_search | keyword、page | 搜索结果列表,同上字段 |
bili_video | bvid | 标题 / UP主 / 分区 / 时长 / 发布 / 播放·弹幕·点赞·投币·收藏·评论 / 简介 / cid |
bili_danmaku | bvid、top | 刷得最多的一批弹幕 + 末尾最新几条 |
bili_week | 无 | 「每周必看」 |
为什么返回纯文本而不是 JSON
因为它的下游是模型,不是程序。B 站热榜原始 JSON 约 172 KB(≈4.5 万 token),
搜一页 32 KB,直接塞进上下文既贵又吵。这里统一压成「一行标题 + 一行元信息」,
一次查询几百 token,模型该知道的都在。
想拿原始 JSON 的话,去 lib/bili.mjs 里把 getJSON 的返回值直接 console.log —— 代码就是文档。
已知边界(说清楚,别指望它做不到的事)
- 没有登录态:拿不到推荐流、关注动态、播放历史、字幕。这些接口都要 Cookie。
- 搜索接口目前免签名,B 站随时可能加 wbi 签名或验证码,挂了就得跟。
- 热榜走的是
popular 而不是 ranking/v2:后者现在会撞风控(code=-352),
代码里写了 popular 优先、失败回退 ranking。
- 弹幕只取当前第一 P。多 P 视频要自己按 cid 拉。
- 只读。不会登录、不会点赞、不会发弹幕。
验证
lib/mcp-server.mjs 是手写的 stdio JSON-RPC(不到两百行),这样这个包一个运行时依赖都没有。
用官方的 @modelcontextprotocol/sdk 当客户端验过:
工具: bili_hot, bili_search, bili_video, bili_danmaku, bili_week
bili_hot 前 100 字: # B站热门(popular)2026/10/22 16:48:25(2 条) | 1. 《影之刃零》最终预告 ...
bili_video 首行: # 【官方 MV】Never Gonna Give You Up - Rick Astley (BV1GJ411x7h7)
空参数 isError: true | bili_search 失败:keyword 不能为空
握手、tools/list、tools/call、错误分支都通。
License
MIT。B 站的数据归 B 站和各自 UP 主;这个包只是把公开接口读出来给你自己看。