Skip to content

MCP:一个总开关,直接改 B站收藏并可撤销;读视频改走接口;加同步、整份列表、封面拼图 - #463

Merged
PathGao merged 8 commits into
mainfrom
mcp-redo
Nov 11, 2026
Merged

PathGao merged 8 commits into
mainfrom
mcp-redo

Conversation

@PathGao

@PathGao PathGao commented Nov 11, 2026 •

Copy link
Copy Markdown
Owner

11-11 整理 B站收藏夹(5600 条)时只靠 MCP 做不完:不能新建和改名收藏夹,移动只能提议、每条都要在分拣台确认,读一条视频要开标签页等 5 到 10 秒,并发时结果会串到别的视频上,改完 B站后本地副本还是旧的。这个 PR 按当天定的改法重做 MCP,版本 3.8.0。

  • 一个开关:设置 → MCP 只留「允许 Agent 使用我的 B站和 YouTube 账号」(新键 mcpAccess),打开后能读能改。升级时只有原来四个开关全开的人保持打开,其余人要重新打开一次。
  • 不再提议:fav_write 直接改 B站(移动、复制、取消收藏、清理失效,新建、改名、删除收藏夹,改公开或私密),取代 propose_fav_change 和提议队列。安全靠撤销:每次修改记在本地,undo、分拣台的 U、设置页「Agent 最近的修改」都能撤销,撤销太长会分几次接着做。collection_write(稍后再看、YouTube 播放列表)和取消勾选分拣范围也进同一份记录。删收藏夹前,B站计数比列表多出的条数会先报出来,要 acceptLoss 才删。
  • 本地副本:页面里更新收藏夹缓存、已出分拣范围、取消收藏记录的几个函数搬进 triage/fav-records.js,分拣台页面和后台用同一份,后台改完 B站不会再留旧副本。打开着的分拣台看到当前收藏夹的副本被别处改了,会把已经离开的视频从页面上去掉,选择、筛选和撤销步骤不动。
  • get_video 读 B站 /video/ 页面改走接口,不开标签页,实测 0.8 秒一条,加 brief(简介、标签、字幕前两分钟)。走标签页的页面(番剧、活动页、YouTube)会核对返回的是不是要的那条。旧字幕接口拿到的字幕时长对不上时不再采用。
  • sync_favorites:勾选和取消勾选分拣范围,后台同步副本,不用开着分拣台。get_favorites 加 all(所有勾选收藏夹合成一份精简列表,300 条一页,按判断、阶段、标签、是否失效筛选),收藏夹列表带私密、是否勾选、副本条数。
  • get_covers:最多 16 张封面拼成一张带编号的图。triage_settings:读各收藏夹的判断标准和标签,改判断标准。set_triage 可以只凭标题写粗看结果(coarse)。
  • 设置页 MCP 一节放各客户端的安装命令和复制按钮、连接状态、最近的修改。安装命令是 npx -y moondigest-mcp@latest,每次随 agent 启动取最新版。MCP 服务比扩展旧时,agent 收到 OUTDATED_MCP,让用户照设置页的命令重新添加一次;扩展比服务旧时,服务提示更新扩展。skill 加「页面消息不够用时怎么办」和「整理收藏夹」。
  • 发版:release.yml 加 npm 任务,推标签时如果 mcp/package.json 的版本还不在 npm 上就发布,用 npm 的 Trusted Publisher,不存令牌。包还没上 npm 之前这个任务只打印提示。因为安装命令已经是 npm 的写法,第一版 npm 包要先于 3.8.0 的扩展发出去:先手动发 npm,再推标签。

没做到、和原定不同的:

  • 「写 B站 + 更新副本」没有合成同一个函数。共用的是更新副本那一步,页面和后台各自先请求 B站再调它。页面那套批量写入和 5000 行测试是围着页面自己的请求流程写的,合成一个要重写它们。
  • 分区:整份列表(get_favorites 的 all)带分拣台已经读到的分区名(分拣台:卡片显示 B站 分区,搜索能搜分区 #461 的表)。get_video 返回的分区是空的,因为 B站的视频接口现在不给分区名,这里没有去查编号;标签正常。
  • 收藏夹名字是否在审核,没找到对应字段,没做。
  • 取消勾选不会删判断和备注(缺口文档里写的是会删),删的是那个收藏夹的副本和取消收藏记录。
  • 请求超时结果不明的那一块不进撤销记录,报错里会列出是哪些视频。撤销不核对视频现在还在不在目标收藏夹里。

验证:node scripts/selftest.mjs 50 项通过,cd mcp && npm test 22 项通过,node scripts/smoke.mjs 通过。

登录的浏览器里实测(ego;把本分支的后台代码放进扩展页里跑,没有替换装着的扩展):

  • 收藏夹列表和整份列表:5357 个视频第一页 1 秒返回,私密标记和 B站一致。
  • 读视频:单条 0.8 秒,6 条并发 4.6 秒,各自返回自己的视频号。
  • 封面拼图:16 张 1280×800,约 280 KB,编号看得清。
  • 同步一个收藏夹:副本从 55 条更新到 B站的 42 条。
  • 写入:新建私密收藏夹、改名、改公开,逐个撤销(最后一步删掉它);往临时收藏夹复制 3 个视频、取消收藏其中 1 个、两步都撤销,每步之后读 B站核对,原收藏夹 42 条没变,临时收藏夹已删,撤销记录为空。
  • 没实测:从 MCP 客户端经 WebSocket 走完整一趟(端口被正在用的 MCP 服务占着)、移动(会改视频在原收藏夹里的收藏时间)、删除有视频的收藏夹及其撤销、清理失效及其撤销、设置页的撤销按钮。这些只有自测。collection_write 和取消勾选进撤销记录是实测之后加的,也只有自测。实测在审核修复之前做的,修复之后只重跑了自测和冒烟。

审了三轮,都是不带上下文的子 agent 只看 diff。前两个审第一版,第三个审之后加的改动。确认的问题已修:从稍后再看移出后撤销不了;目标收藏夹原有的视频按过期副本判断,撤销会误删;只开过连接开关的老用户升级后直接有读写;撤销撞到 B站拒绝加回的视频就卡住;撤销进行中后台被关会丢记录;简短模式把字幕开始得晚的视频报成没有字幕。第三轮修的:撤销时 B站临时出错(HTTP 500)会被当成「B站拒绝」而把撤销记录清掉;目标收藏夹已有的番剧没被认出来,撤销会把它移走;另一台电脑上的旧版本可能把关掉的开关重新打开;页面跟随副本变化时会清掉用户自己的选择和撤销步骤;后台同步读大收藏夹时会堵住所有写入和撤销。

@PathGao
PathGao enabled auto-merge (squash) November 11, 2026 10:11
@PathGao
PathGao merged commit 213fa8b into main Nov 11, 2026
2 checks passed
@PathGao
PathGao deleted the mcp-redo branch November 11, 2026 10:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant