本项目聚焦于解决Windows 10环境下MCP服务器使用时出现的问题。在使用MCP服务器时,Claude可能出现“偷懒”情况,即不完全写入文件,致使中间过程文件被覆盖且无法恢复。本方案通过一系列步骤实现日志持久化,有效解决该问题。
为确保每次操作都能记录到硬盘,创建一个新的logger.mjs
文件。此脚本会自动创建logs
目录,并将所有日志信息追加到KAN_server.log
文件中。
代码解释:
fs.promises
模块处理异步文件操作。logs
目录存在,避免路径错误。appendFile
方法将内容追加到该文件。index.js
中的write_file
逻辑在index.js
文件里,修改write_file
操作的处理逻辑,实现以下功能:
修改后的逻辑流程:
以下是logger.mjs
文件的示例代码:
// 使用fs.promises模块处理异步文件操作
import { promises as fs } from 'fs';
import path from 'path';
// 确保logs目录存在
const logsDir = path.join(process.cwd(), 'logs');
await fs.mkdir(logsDir, { recursive: true });
// 定义日志文件
const logFile = path.join(logsDir, 'KAN_server.log');
// 追加日志信息到文件
async function logMessage(message) {
try {
await fs.appendFile(logFile, `${new Date().toISOString()} - ${message}\n`);
} catch (error) {
console.error('Error writing to log file:', error);
}
}
// 导出日志记录函数
export { logMessage };
以下是index.js
中修改后的write_file
逻辑示例:
// 解析传入参数
const { filePath, content } = parseArgs(args);
// 验证目标文件路径
if (!isValidPath(filePath)) {
logMessage(`Invalid file path: ${filePath}`);
return { status: 'error', message: 'Invalid file path' };
}
// 检查文件是否存在
const fileExists = await fs.access(filePath).then(() => true).catch(() => false);
if (fileExists) {
// 生成备份文件名
const backupFileName = generateBackupFileName();
const backupFilePath = path.join(path.dirname(filePath), backupFileName);
// 重命名原文件
await fs.rename(filePath, backupFilePath);
logMessage(`File backed up to: ${backupFilePath}`);
}
// 写入新内容
try {
await fs.writeFile(filePath, content);
logMessage(`File written successfully: ${filePath}`);
return { status: 'success', message: 'File written successfully', backupFile: backupFileName || null };
} catch (error) {
logMessage(`Error writing file: ${filePath}, ${error.message}`);
return { status: 'error', message: 'Error writing file' };
}
为确保备份文件名唯一且易于识别,采用以下格式:
[月份][日期][年份最后两位]_[小时][分钟]__CLDBak
例如:032524_14_59__CLDBak
返回的内容必须是JSON格式,以确保Claude桌面应用能正确显示信息。修改后的代码确保了这一点,并在响应文本中包含了备份文件的信息。
示例响应:
{
"status": "success",
"message": "File written successfully. Backup file created as 032524_14_59__CLDBak."
}
文档未提及相关许可证信息。
⚠️ 重要提示
- 确保目标目录有写入权限,避免因权限问题导致操作失败。
- 注意异常处理,在所有关键步骤中添加了错误捕捉和日志记录,以便及时发现和解决问题。
- 正确处理相对路径和绝对路径的情况,确保文件操作的准确性。
💡 使用建议
考虑到未来可能需要使用语音模式操作Windows 10,代码中添加了详细的注释,方便后续维护。在进行代码修改或扩展时,可参考这些注释。