MCP 会话自愈 MaxHou-infinity/dsh-mcp-session-recovery
DeepSeek HarnessMCP 会话失效时自动重连,无需重启 DSH
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add MaxHou-infinity/dsh-mcp-session-recovery该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · other
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 16 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/16) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0⚪ 扫描:无法判定尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。
- · 包内无可扫 JS
- · TS 源码(可能为非 JS 实现或未发布源码),无法判定
扫描于 2026/10/31(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
树外补丁:让 @deepseek-ai/dsh-mcp-client 在有状态 Streamable HTTP MCP 服务重启后自动恢复,不用重启 DSH 才能用。
README
由 DeepSeek 最新模型翻译生成dsh-mcp-session-recovery
一个仓外补丁,让 @deepseek-ai/dsh-mcp-client 在带状态的 Streamable HTTP MCP 服务端不再认识会话时恢复过来——不管服务端是重启了,还是服务一直在线、只是会话因空闲超时被清理了。
没有它,该服务端的所有工具会永久失败——只能重启 DSH。有了它,客户端会发现会话已死,并在一两秒内自行重建连接。
中文摘要:当带会话状态的 MCP 服务端(Streamable HTTP)不再认识 DSH 手里那个 mcp-session-id 时(服务端重启,或会话因空闲超时被清理),该服务端的所有工具调用会永久失败,只能靠重启 DSH 恢复。本仓库是一个仓外补丁,让客户端自己发现会话失效并重连,1~2 秒内自愈。
⚠️ 注意一个常见误解:并不需要服务端重启。实测有服务端把会话持久化到磁盘、重启完全无损,但设有 12 小时空闲超时 —— 只要 DSH 挂着超过 12 小时没有 MCP 调用,同样会中招。详见下文。
上游已知(见下方链接),官方暂不接受外部 PR,故以此形式发布。
这个 bug
dsh-mcp-client 有一套完整重连监管机制——有界指数退避、按故障区间计算的尝试预算、重连后重新同步工具。
展开完整文档(README 剩余 1 节)
dsh-mcp-session-recovery
一个仓外补丁,让 @deepseek-ai/dsh-mcp-client 在带状态的 Streamable HTTP MCP 服务端不再认识会话时恢复过来——不管服务端是重启了,还是服务一直在线、只是会话因空闲超时被清理了。
没有它,该服务端的所有工具会永久失败——只能重启 DSH。有了它,客户端会发现会话已死,并在一两秒内自行重建连接。
中文摘要:当带会话状态的 MCP 服务端(Streamable HTTP)不再认识 DSH 手里那个 mcp-session-id 时(服务端重启,或会话因空闲超时被清理),该服务端的所有工具调用会永久失败,只能靠重启 DSH 恢复。本仓库是一个仓外补丁,让客户端自己发现会话失效并重连,1~2 秒内自愈。
⚠️ 注意一个常见误解:并不需要服务端重启。实测有服务端把会话持久化到磁盘、重启完全无损,但设有 12 小时空闲超时 —— 只要 DSH 挂着超过 12 小时没有 MCP 调用,同样会中招。详见下文。
上游已知(见下方链接),官方暂不接受外部 PR,故以此形式发布。
这个 bug
dsh-mcp-client 有一套完整重连监管机制——有界指数退避、按故障区间计算的尝试预算、重连后重新同步工具。它只接了一个信号:
generation.onclose = () => { ... if (attemptSettled) generationDown(generation) }
会话丢失从不触发 close。MCP SDK 把它报成请求级错误:传输层抛出 SdkHttpError,status: 404,只调用 onerror,onclose 一声不吭。那个已死的 mcp-session-id 会被留着,因为 SDK 只在握手成功时才改写它——而握手只发生在 connectGeneration() 里,这个函数只在启动时或重连后运行。
于是:
服务端不再认识我们的 mcp-session-id → 客户端还攥着旧 id → 下次工具调用 → HTTP 404 → SDK 触发 onerror(不是 onclose) → dsh-mcp-client 没订阅 onerror → 信号被丢掉 → 不重连,不重新握手,session id 永远不换 ⇒ Host 进程活着一天,就永久失败一天
开新会话没用:MCP 桥接是进程级的,每个 Host 一个插件实例,所有会话共用。只有重启 Host 才行。
有个很说明问题的对比:连接尝试失败 能走到监管机制(settleFailedGeneration → generationDown → scheduleReconnect),所以启动时就挂掉的服务端会一直重试。只有已建立连接上的会话失效会掉进这个缝里。
什么会让会话失效,取决于服务端
两种情形都产生同样的 404、同样的永久失败,所以补丁也一样——但触发条件值得了解,因为它决定你多久撞上一次:
| 服务端行为 | 触发条件 | 说明 |
| 会话存在内存里 | 进程重启 | 经典情形 |
| 会话持久化并恢复 | 空闲超时 | 重启无害;长时间空闲才有害 |
第二种情形是这里端到端验证过的。Nowledge Mem 的后端日志写着
MCP session idle timeout and restart restore store configured
seconds=43200 # 12 hours
store_path=…/co.nowledge.mem.desktop/mcp-sessions.json
而且会话确实能在服务端反复重启后存活(已确认:连续两次重启应用之前创建的 MCP 会话,之后仍然返回 200),而超过 43200s 的会话会被清理,并以 404 Not Found: Session not found 拒绝。
实际后果: DSH 连续运行超过 12 小时且没有发起 MCP 调用,就足以断开连接——没有崩溃,没有重启,什么都看不出来。这比服务端崩溃容易触发得多,而正是这种形态的故障,不打补丁就完全不可见。
受影响的版本
lib/index.js 在这些版本之间逐字节相同,所以同一个补丁对两者都适用:
| 版本 | lib/index.js sha256 | 是否受影响 |
| @deepseek-ai/dsh-mcp-client@0.2.0-rc.2 | 758d8fc4…f5dd | 是 |
| @deepseek-ai/dsh-mcp-client@0.2.1-alpha.4 | 758d8fc4…f5dd | 是 |
grep -c onerror lib/index.js → 两者都是 0。
安装
git clone https://github.com/MaxHou-infinity/dsh-mcp-session-recovery
cd dsh-mcp-session-recovery
./apply.sh
脚本会找到已安装的插件,如果文件与补丁所基于的版本不匹配就拒绝继续(除非你确认),把原文件备份到 ~/.dsh/backups/dsh-mcp-client-pre-onerror-fix/,在临时仓库里应用补丁,这样部分应用不会落地,并对结果做语法检查。脚本是幂等的。
然后重启 DSH:
kill $(lsof -ti tcp:3080 -sTCP:LISTEN); dsh web
验证
离线复现 bug 和修复,不用重启 DSH,也不用真实 MCP 服务端——一个假的有状态服务端会在中途让会话失效:
node test/run.mjs /path/to/.../dsh-mcp-client/lib/index.js
它会打印 RECOVERED(已打补丁)或 STUCK(未打补丁)。对着备份跑一遍就能看到对照组。
验证真实环境——DSH 正在运行、MCP 工具正常工作时,让会话失效,然后调用工具:
- 第一次调用失败,报 404 Session not found(预期如此——这就是触发点)
- 一两秒内,调用再次成功,无需重启 DSH
打这个补丁之前,第二步从不会发生。
这个补丁所基于的端到端运行结果
对着真实 DSH 主机(0.2.0-rc.2)和真实 Nowledge Mem 后端,让会话超过服务端 43200s 空闲超时来使其失效:
| 步骤 | 观察到的现象 |
| 第一次工具调用 | Error POSTing to endpoint: Not Found: Session not found |
| 约 8s 后,服务端会话存储 | 出现一个新的 dsh-mcp-client 会话 id |
| 第二次工具调用 | 成功 |
中间没有重启 DSH。服务端会话存储在这里是有用的见证者:新条目自己冒出来,就证明发生了一次全新的 initialize 握手,而只有重连后的那一代才会执行这个握手。
要用同样的方式让持久化会话的服务端会话失效,就停掉服务端,让它会话存储里的条目过期,再启动它——改动一个活跃的存储没有意义,因为运行中的服务器把会话保存在内存里。
补丁改了什么
两处新增,约 35 行,其他路径行为不变:
1. isSessionLostError(error) —— 一个刻意收窄的判断函数:status === 404(传输层只会在请求携带会话 id 时产生这个状态码),加上 400 且响应体指明会话缺失/无效/未知/过期。其他情况原样抛出,所以普通的请求错误永远不会回收一个健康的 generation。
2. generation.onerror = (error) => { if (attemptSettled && isSessionLostError(error)) generationDown(generation) }
—— 把会话丢失导入 onclose 已经在用的同一条断连路径。下游的一切(退避、重新握手、工具重新同步)都是现有机制,未作改动。
卸载
./revert.sh # restores from the newest backup
重新安装或升级 DSH 也会还原它 —— 这个补丁位于全局安装的 @deepseek-ai/dsh 包内部,不会在 DSH 升级后保留。升级后如果 bug 仍在,重新运行 ./apply.sh(用 grep -c onerror lib/index.js 检查)。
为什么这不是上游 PR
官方仓库不接受 PR。摘自 CONTRIBUTING.md:
We are sorry that we cannot accept external pull requests at the moment.
而且仓库的 PR API 返回 404 —— pull request 已关闭,issue 也一样。政策转而把贡献者引向 Discussions 和生态:
We do not believe that packages in the official repository are inherently more
important than packages created by the community.
所以这里以树外补丁的形式发布,而不是 fork。上游报告在 deepseek-ai/deepseek-harness#9740;如果维护者采纳了修复,这个仓库就会退役。
许可证
MIT。补丁修改的是 MIT 许可的代码,Copyright (c) 2026 DeepSeek;这里的补丁文件和脚本按相同条款提供。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
MaxHou-infinity/dsh-mcp-session-recovery
MCP 会话失效时自动重连,无需重启 DSH
相关插件 · 其他
模型破甲清洗YuJunZhiXue/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 14,822已汉化DeepSeek 客户端
73
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 718已汉化DSH
71.2
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,261已汉化DSH
70.7
破甲评测WoYun520/dsh-purge
在本机分离宿主拦截与模型拒绝,做受控红队评测
★ 199已汉化DSH
69.7