问题描述
在设置中更改 MCP 服务器的 authToken 时,应用不会自动重启 HTTP 服务以加载新的 Token。这导致服务端内存中的旧 Token 与配置文件中的新 Token 不一致,从而持续返回 HTTP 401 错误。用户必须完全退出并重新启动应用才能使更改生效。
复现步骤
启动 Anything Analyzer 应用。
确保 MCP 服务器处于运行状态(开关已打开)。
修改 MCP 配置中的 authToken(或在 UI 中重置 Token)。
观察 Claude Code 或通过 curl 尝试连接 MCP 端点。
预期结果:
Token 更新后,MCP 服务器应自动重启或重新加载配置,允许使用新 Token 进行授权。
实际结果:
MCP 服务器仍使用旧的 Token 进行验证,导致客户端收到 401 Unauthorized: invalid or missing token 错误。只有重启整个应用进程后,新 Token 才会生效。
根本原因分析
根据对 out/main/index.js 的代码分析,mcp-server:saveConfig 事件处理程序存在逻辑缺陷。
代码位置: out/main/index.js (约 5816-5828 行)
问题逻辑:
javascript
electron.ipcMain.handle("mcp-server:saveConfig", async (_event, config) => {
saveMCPServerConfig(config);
// 仅处理 enabled 状态的切换
// if (config.enabled && !isMCPServerRunning()) { initMCPServer(...) }
// else if (!config.enabled && isMCPServerRunning()) { stopMCPServer() }
// ⚠️ 缺少针对 "token changed" 的重启逻辑
});
解释: 当前的逻辑仅在 enabled 状态翻转时停止或初始化服务。当仅修改 authToken 时,配置会被写入磁盘 (saveMCPServerConfig),但运行中的 HTTP Server 实例不会被终止和重建,导致内存中的 authToken 变量未更新。
修复建议
在 mcp-server:saveConfig 的处理逻辑中,增加对 authToken 变更的检测。如果检测到 Token 发生变化且服务正在运行,应触发服务重启(stopMCPServer -> initMCPServer)。
或者,作为临时变通方案,文档应明确告知用户:“修改 MCP Token 后,必须手动完全重启应用才能生效”。
环境信息
应用版本: 3.6.50
操作系统: Windows (基于参考日志推断)
相关组件: Electron, MCP Server
问题描述
在设置中更改 MCP 服务器的 authToken 时,应用不会自动重启 HTTP 服务以加载新的 Token。这导致服务端内存中的旧 Token 与配置文件中的新 Token 不一致,从而持续返回 HTTP 401 错误。用户必须完全退出并重新启动应用才能使更改生效。
复现步骤
启动 Anything Analyzer 应用。
确保 MCP 服务器处于运行状态(开关已打开)。
修改 MCP 配置中的 authToken(或在 UI 中重置 Token)。
观察 Claude Code 或通过 curl 尝试连接 MCP 端点。
预期结果:
Token 更新后,MCP 服务器应自动重启或重新加载配置,允许使用新 Token 进行授权。
实际结果:
MCP 服务器仍使用旧的 Token 进行验证,导致客户端收到 401 Unauthorized: invalid or missing token 错误。只有重启整个应用进程后,新 Token 才会生效。
根本原因分析
根据对 out/main/index.js 的代码分析,mcp-server:saveConfig 事件处理程序存在逻辑缺陷。
代码位置: out/main/index.js (约 5816-5828 行)
问题逻辑:
javascript
electron.ipcMain.handle("mcp-server:saveConfig", async (_event, config) => {⚠️ 缺少针对 "token changed" 的重启逻辑
saveMCPServerConfig(config);
// 仅处理 enabled 状态的切换
// if (config.enabled && !isMCPServerRunning()) { initMCPServer(...) }
// else if (!config.enabled && isMCPServerRunning()) { stopMCPServer() }
//
});
解释: 当前的逻辑仅在 enabled 状态翻转时停止或初始化服务。当仅修改 authToken 时,配置会被写入磁盘 (saveMCPServerConfig),但运行中的 HTTP Server 实例不会被终止和重建,导致内存中的 authToken 变量未更新。
修复建议
在 mcp-server:saveConfig 的处理逻辑中,增加对 authToken 变更的检测。如果检测到 Token 发生变化且服务正在运行,应触发服务重启(stopMCPServer -> initMCPServer)。
或者,作为临时变通方案,文档应明确告知用户:“修改 MCP Token 后,必须手动完全重启应用才能生效”。
环境信息
应用版本: 3.6.50
操作系统: Windows (基于参考日志推断)
相关组件: Electron, MCP Server