update_note
Modify note titles and content directly from Claude conversations by specifying the note ID and providing updated details, ensuring quick and organized note management.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | New content for the note | |
| id | Yes | The ID of the note to update | |
| title | No | New title for the note |
Implementation Reference
- src/index.ts:133-155 (registration)Registers the 'update_note' MCP tool, defining the input schema using Zod (id required, title/content optional) and providing an async handler that constructs updates object and delegates to noteService.updateNote, returning formatted JSON response.server.tool( 'update_note', { id: z.string().describe('The ID of the note to update'), title: z.string().optional().describe('New title for the note'), content: z.string().optional().describe('New content for the note'), }, async ({ id, title, content }) => { const updates: any = {}; if (title !== undefined) updates.title = title; if (content !== undefined) updates.content = content; const updatedNote = noteService.updateNote(id, updates); return { content: [ { type: 'text', text: JSON.stringify(updatedNote, null, 2), }, ], }; } );
- src/services/noteService.ts:370-435 (handler)Core handler function that performs the note update: finds the note by ID, updates title/content in markdown file (handling header) or mock DB fallback, refreshes cache, and returns the updated Note object.function updateNote(id: string, updates: UpdateNoteParams): Note { const existingNote = getNoteById(id); if (!existingNote) { throw new Error(`Note with id ${id} not found`); } if (isNotePlanAvailable() && existingNote.filePath) { try { // Update the file content let newContent = existingNote.content; if (updates.content !== undefined) { newContent = updates.content; } // If title is being updated, update the first markdown header if (updates.title !== undefined) { const lines = newContent.split('\n'); let headerUpdated = false; for (let i = 0; i < lines.length; i++) { if (lines[i].startsWith('# ')) { lines[i] = `# ${updates.title}`; headerUpdated = true; break; } } // If no header found, add one at the beginning if (!headerUpdated) { lines.unshift(`# ${updates.title}`, ''); } newContent = lines.join('\n'); } // Write updated content to file fs.writeFileSync(existingNote.filePath, newContent, 'utf8'); // Clear cache to force refresh notesCache = []; lastCacheUpdate = 0; // Return updated note return parseMarkdownFile(existingNote.filePath, existingNote.folder)!; } catch (error) { throw new Error(`Failed to update note: ${(error as Error).message}`); } } else { // Fallback to mock database const noteIndex = notesDb.findIndex(note => note.id === id); if (noteIndex === -1) { throw new Error(`Note with id ${id} not found`); } const note = notesDb[noteIndex]; const updatedNote: Note = { ...note, ...updates, modified: new Date().toISOString() }; notesDb[noteIndex] = updatedNote; return updatedNote; } }
- src/services/noteService.ts:32-36 (schema)TypeScript interface defining the input parameters for the updateNote function (title, content, folder all optional).interface UpdateNoteParams { title?: string; content?: string; folder?: string; }
- src/index.ts:135-139 (schema)Zod schema for 'update_note' tool inputs: id (required string), title/content (optional strings).{ id: z.string().describe('The ID of the note to update'), title: z.string().optional().describe('New title for the note'), content: z.string().optional().describe('New content for the note'), },