import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import type { XiaomiNoteClient } from "../client";
import { NotesCache } from "../cache";
export function registerDeleteFolderTool(server: McpServer, client: XiaomiNoteClient, cache: NotesCache): void {
server.registerTool(
"delete_folder",
{
description: "删除文件夹",
inputSchema: {
id: z.string().min(1, "文件夹 ID 不能为空"),
purge: z.boolean().optional().describe("是否永久删除"),
},
},
async ({ id, purge = false }: { id: string; purge?: boolean }) => {
const folder = cache.getFolders().find((item) => item.id === id) ?? (await refreshAndFind(id, cache));
if (!folder) {
throw new Error(`未找到文件夹:${id}`);
}
await client.deleteFolder(id, folder.tag, purge);
await cache.refresh();
server.sendResourceListChanged();
await server.server.sendResourceUpdated({ uri: "minote://folders" });
await server.server.sendResourceUpdated({ uri: `minote://folders/${id}/notes` });
return {
content: [
{
type: "text" as const,
text: purge ? `文件夹 ${id} 已永久删除。` : `文件夹 ${id} 已删除。`,
},
],
};
},
);
}
async function refreshAndFind(id: string, cache: NotesCache) {
await cache.refresh();
return cache.getFolders().find((item) => item.id === id);
}