fix: MCP server 外部客户端无法启动 + getMessages 分页失效 - #340
Conversation
MCP server 入口 dist-electron/mcp.js 位于 app.asar.unpacked,但其依赖 @modelcontextprotocol/sdk 未列入 asarUnpack,仍留在 app.asar 内, 导致第三方 MCP 客户端启动时报 Cannot find module '@modelcontextprotocol/sdk/server/stdio.js'。
SQL 查询的 OFFSET 参数被硬编码为 0,传入的 offset 从未真正生效, 导致 scanOffset 循环每次取到的都是同一批最新消息, get_messages 的分页与时间过滤全部失效。
88a24e7 to
93d0f03
Compare
|
感谢 PR。两处改动我分开看,结论是:第 1 处建议合入,第 2 处建议撤掉。 ✅ 修改 1:
|
问题
1. 第三方 MCP 客户端无法启动 ciphertalk-mcp
dist-electron/mcp.js(MCP server 入口)位于app.asar.unpacked,但它 require 的依赖@modelcontextprotocol/sdk未列入asarUnpack,仍被打进app.asar内。任何外部 MCP 客户端(如 Claude Desktop、Hermes)启动时都会报:因为 mcp.js 能解析到 unpacked 目录下的 zod/better-sqlite3,唯独 SDK 留在 asar 内无法解析。
修复:
build.asarUnpack补上node_modules/@modelcontextprotocol/**/*,与已有的 zod、@ai-sdk 等保持一致。2. getMessages 分页(offset/时间过滤)失效
electron/services/chat/messageQueries.ts中三处 SQL 的OFFSET参数硬编码为0:传入的
offset从未真正进入 SQL。readService的 scanOffset 循环每次取到的都是同一批最新消息,导致 MCPget_messages的 offset 分页与 startTime/endTime 过滤全部失效(翻页永远返回最新一批)。修复:将 SQL 的 OFFSET 改为传入的
offset,JS 层相应只截前limit条(避免双重偏移),hasMore判断同步修正。验证
npm run build:mcp通过get_messagesoffset 翻页可返回不同批次(修复前 offset=0/200/400 返回完全相同结果)Fixes #339