import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
import { NotesCache } from "../cache";
import { ContentConverter } from "../converter";
import { buildNotesListItem } from "../note";
export function registerFolderNotesResource(
server: McpServer,
cache: NotesCache,
converter: ContentConverter,
): void {
const template = new ResourceTemplate("minote://folders/{id}/notes", {
list: async () => {
const folders = cache.getFolders();
const resources = folders.map((folder) => ({
name: folder.subject || folder.id,
title: folder.subject || folder.id,
uri: `minote://folders/${folder.id}/notes`,
description: `文件夹 ID: ${folder.id}`,
mimeType: "text/plain",
}));
return { resources };
},
});
server.registerResource(
"folder-notes",
template,
{
title: "文件夹内的笔记",
description: "按文件夹返回笔记列表",
mimeType: "text/plain",
},
async (_uri, variables) => {
const value = variables.id;
const folderId = Array.isArray(value) ? value[0] : value;
if (!folderId) {
throw new Error("缺少文件夹 ID");
}
const items = cache
.getNotes()
.filter((note) => note.folderId === folderId)
.map((note, index) => {
const item = buildNotesListItem(note, converter);
const modified = new Date(item.modifyDate).toISOString();
return `${index + 1}. [${item.id}] ${item.title} (${modified})`;
});
const text = items.length > 0 ? items.join("\n") : "该文件夹暂无笔记";
return {
contents: [
{
uri: `minote://folders/${folderId}/notes`,
text,
},
],
};
},
);
}