环境
ReadAny Desktop:v1.3.5
ReadAny CLI:v0.1.0
Windows 版本:Windows 11 x64
Node.js:v24.13.0
MCP Profile:readonly
ReadAny 实际数据目录:%APPDATA%\com.readany.app
问题描述
在 Windows 上,ReadAny Desktop 中已经存在书籍和标注数据,doctor 也能报告 Windows 数据目录,但通过默认配置启动 CLI/MCP 后,books.list 返回空书库。
进一步检查发现,实际数据访问模块在没有设置 READANY_HOME 时,没有使用 doctor 所报告的 Windows 数据目录,而是使用了不适用于 Windows 的默认目录。
这导致诊断结果与实际读取行为不一致。
复现步骤
在 Windows 版 ReadAny 中添加至少一本书。
确认数据位于:
%APPDATA%\com.readany.app
不设置 READANY_HOME。
使用默认配置启动 readonly MCP:
{
"mcpServers": {
"readany": {
"command": "readany",
"args": [
"mcp",
"serve",
"--profile",
"readonly"
]
}
}
}
调用 books.list。
对比 doctor 报告的数据目录。
实际结果
doctor 能识别或报告 %APPDATA%\com.readany.app;
MCP 可以正常启动并列出工具;
books.list 返回空书库;
ReadAny Desktop 中实际已有书籍;
显式设置 READANY_HOME 后,同一个查询立即能够读取现有书库。
预期结果
Windows 上所有 CLI/MCP 数据访问模块应与 doctor 使用同一套数据目录解析逻辑。
在没有显式设置 READANY_HOME 时,应默认读取:
%APPDATA%\com.readany.app
如果实际目录不存在或无法识别,应返回明确错误或警告,而不是成功启动后静默返回空书库。
已验证的临时解决办法
向 ReadAny MCP 进程显式传入:
READANY_HOME=%APPDATA%\com.readany.app
例如在 Codex 项目级配置中设置对应环境变量。重启客户端后:
books.list 能识别现有书籍;
章节、书签、高亮和阅读位置均可读取;
该变量只影响 ReadAny MCP 进程,不移动或修改桌面端数据。
可能原因
根据实际表现推测,doctor 与数据访问模块可能分别实现了数据目录解析,其中一个使用了 Windows 的 %APPDATA%,另一个仍使用其他平台的默认目录。
这是根据行为作出的推测,尚未确认具体源码位置。
建议
建议:
让 doctor、CLI 工具和 MCP Server 共用同一个数据目录解析函数;
在 doctor --json 中同时输出“检测到的目录”和“运行时实际使用的目录”;
数据库文件不存在时给出警告,避免把错误目录表现为空书库;
在 MCP 启动日志中输出经过隐私处理的数据目录;
增加 Windows 无 READANY_HOME 环境变量的自动化测试。
环境
ReadAny Desktop:v1.3.5
ReadAny CLI:v0.1.0
Windows 版本:Windows 11 x64
Node.js:v24.13.0
MCP Profile:readonly
ReadAny 实际数据目录:%APPDATA%\com.readany.app
问题描述
在 Windows 上,ReadAny Desktop 中已经存在书籍和标注数据,doctor 也能报告 Windows 数据目录,但通过默认配置启动 CLI/MCP 后,books.list 返回空书库。
进一步检查发现,实际数据访问模块在没有设置 READANY_HOME 时,没有使用 doctor 所报告的 Windows 数据目录,而是使用了不适用于 Windows 的默认目录。
这导致诊断结果与实际读取行为不一致。
复现步骤
在 Windows 版 ReadAny 中添加至少一本书。
确认数据位于:
%APPDATA%\com.readany.app
不设置 READANY_HOME。
使用默认配置启动 readonly MCP:
{
"mcpServers": {
"readany": {
"command": "readany",
"args": [
"mcp",
"serve",
"--profile",
"readonly"
]
}
}
}
调用 books.list。
对比 doctor 报告的数据目录。
实际结果
doctor 能识别或报告 %APPDATA%\com.readany.app;
MCP 可以正常启动并列出工具;
books.list 返回空书库;
ReadAny Desktop 中实际已有书籍;
显式设置 READANY_HOME 后,同一个查询立即能够读取现有书库。
预期结果
Windows 上所有 CLI/MCP 数据访问模块应与 doctor 使用同一套数据目录解析逻辑。
在没有显式设置 READANY_HOME 时,应默认读取:
%APPDATA%\com.readany.app
如果实际目录不存在或无法识别,应返回明确错误或警告,而不是成功启动后静默返回空书库。
已验证的临时解决办法
向 ReadAny MCP 进程显式传入:
READANY_HOME=%APPDATA%\com.readany.app
例如在 Codex 项目级配置中设置对应环境变量。重启客户端后:
books.list 能识别现有书籍;
章节、书签、高亮和阅读位置均可读取;
该变量只影响 ReadAny MCP 进程,不移动或修改桌面端数据。
可能原因
根据实际表现推测,doctor 与数据访问模块可能分别实现了数据目录解析,其中一个使用了 Windows 的 %APPDATA%,另一个仍使用其他平台的默认目录。
这是根据行为作出的推测,尚未确认具体源码位置。
建议
建议:
让 doctor、CLI 工具和 MCP Server 共用同一个数据目录解析函数;
在 doctor --json 中同时输出“检测到的目录”和“运行时实际使用的目录”;
数据库文件不存在时给出警告,避免把错误目录表现为空书库;
在 MCP 启动日志中输出经过隐私处理的数据目录;
增加 Windows 无 READANY_HOME 环境变量的自动化测试。