Skip to main content
Glama
note-detail.ts1.95 kB
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js"; import { ContentConverter } from "../converter"; import { XiaomiNoteClient } from "../client"; import { NotesCache } from "../cache"; import { buildNotesListItem, deriveNoteTitle } from "../note"; export function registerNoteDetailResource( server: McpServer, client: XiaomiNoteClient, converter: ContentConverter, cache: NotesCache, ): void { const template = new ResourceTemplate("minote://notes/{id}", { list: async () => { const resources = cache.getNotes().map((note) => { const item = buildNotesListItem(note, converter); return { name: item.id, title: item.title, uri: `minote://notes/${item.id}`, description: `最后修改:${new Date(item.modifyDate).toISOString()}`, mimeType: "text/markdown", }; }); return { resources }; }, }); server.registerResource( "note-detail", template, { title: "笔记详情", description: "根据 ID 返回笔记 Markdown 内容", mimeType: "text/markdown", }, async (_uri: URL, variables: Record<string, string | string[]>) => { const value = variables.id; const noteId = Array.isArray(value) ? value[0] : value; if (!noteId) { throw new Error("缺少笔记 ID"); } const response = await client.getNote(noteId); const note = response.data.entry; cache.upsertNote(note); const title = deriveNoteTitle(note, converter); const markdown = converter.xmlToMarkdown(note.content ?? note.snippet ?? ""); const fullText = title ? `# ${title}\n\n${markdown}` : markdown; return { contents: [ { uri: `minote://notes/${noteId}`, text: fullText.trim(), }, ], }; } ); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LaelLuo/mi_note_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server