[Bug]0.1.6-aplha.1,MCP 工具重名会让会话恢复失败:failOnStartupError 把可容纳的错误升级成了致命错误 #6755
Enderman112
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
概要
挂载实验性 Browser Use 提供方后,一次 MCP 工具注册冲突会升级成致命的会话故障:所有新会话都无法启动/恢复。MCP 客户端自身对这类错误的默认处理是容纳(
registrationFailure: "contain"),但启动同步路径在设置了failOnStartupError时会把它替换成"throw",于是一个工具重名就打死整个会话,而不是只让那个 MCP 服务器失效。环境
0.1.6-alpha.1@deepseek-ai/dsh-mcp-client0.1.6-alpha.1@deepseek-ai/dsh-tools0.1.6-alpha.1@playwright/mcp0.0.80dsh web配置
按提供方 README 的最小配置挂载 Browser Use 核心服务 + Playwright MCP 提供方:
(作为 profile 的
cordis.patch.yml里的顶层insert:条目。组合本身没有问题——dsh web --dump-config能看到两行都进去了,config块也正确挂在了后端那一条下面。)实际行为
服务启动后,第一次 MCP 同步抛出工具重复注册错误:
紧接着会话直接失败,Web 界面完全打不开会话:
为什么一个重名会变成致命错误
@deepseek-ai/dsh-mcp-client其实已经把这类失败建模成可恢复的。syncTools里:而该选项是这样选出来的:
启动同步走的是
startupOpts(enqueueSync(generation, startupOpts)),所以在设了failOnStartupError的情况下,这个"容器"被绕过,重复注册错误直接从连接建立过程抛出去 → 会话恢复失败。期望行为
与可选 MCP 提供方发生的工具名冲突,应当让该提供方降级(其工具不可用 + 记录清晰错误),而不是让会话根本无法启动。具体可选:
registrationFailure: "contain";或failOnStartupError只覆盖连接失败,不覆盖工具注册冲突;或待确认的问题
enqueueSync明确串行化了所有同步,以防两次竞态的 dispose/register 交换,所以这个重复看起来不像是两次竞争同步导致的。"重复"本身的成因可能与上面这个"致命性"问题是两回事。dsh-context@0.52.2通过其tools.register归属包装器出现在调用栈里。读过createToolAttribution的实现后,它只做包装并委托一次(带WeakSet防重入),所以很可能不是重复的来源。这里仅因它位于调用路径上、排查时可能相关才提一句。复现步骤
@deepseek-ai/dsh-browser-use+@deepseek-ai/dsh-experimental-browser-use-playwright-mcp(另需playwright install chromium装 Chromium)。dsh web。观察到的结果:服务端记录一次重复注册错误;会话恢复失败并报上述信息。
卸载该提供方(移除两个包并删掉挂载)后会话恢复正常启动——我就是这样确认相关性的。
All reactions