Skip to main content
Glama
bscott

NotePlan MCP Server

by bscott

create_daily_note

Create a daily note in NotePlan with specified date and initial content to organize daily tasks and thoughts.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateNoThe date for the daily note (YYYY-MM-DD format)
contentNoInitial content for the daily note

Implementation Reference

  • The core handler function that implements the logic for creating a daily note. It generates a filename based on the date, checks for existence, uses a default template if no content provided, writes to the NotePlan Calendar directory or falls back to mock database, and returns the created note object.
    function createDailyNote(options: CreateDailyNoteParams = {}): Note {
      const noteDate = options.date ? new Date(options.date) : new Date();
      const dateStr = noteDate.toISOString().split('T')[0].replace(/-/g, ''); // YYYYMMDD format
      const noteId = `calendar-${dateStr}`;
      
      // Check if daily note already exists
      const existingNote = getNoteById(noteId);
      if (existingNote) {
        throw new Error(`Daily note for ${dateStr} already exists`);
      }
      
      const defaultTemplate = `# ${dateStr}
    
    ## Today's Plan
    - [ ] 
    
    ## Notes
    
    
    ## Reflection
    
    
    ---
    Created: ${noteDate.toISOString()}`;
      
      const content = options.content || defaultTemplate;
      
      if (isNotePlanAvailable()) {
        // Write to actual NotePlan directory
        const filePath = path.join(CALENDAR_PATH, `${dateStr}.md`);
        try {
          fs.writeFileSync(filePath, content, 'utf8');
          
          // Clear cache to force refresh
          notesCache = [];
          lastCacheUpdate = 0;
          
          // Return the newly created note
          return parseMarkdownFile(filePath, 'Calendar')!;
        } catch (error) {
          throw new Error(`Failed to create daily note: ${(error as Error).message}`);
        }
      } else {
        // Fallback to mock database
        const newNote: Note = {
          id: noteId,
          title: `Daily Note - ${dateStr}`,
          content,
          created: noteDate.toISOString(),
          modified: noteDate.toISOString(),
          folder: 'Calendar',
          type: 'daily'
        };
        
        notesDb.push(newNote);
        return newNote;
      }
    }
  • TypeScript interface defining the input parameters for the createDailyNote function: optional date (string) and content (string).
    interface CreateDailyNoteParams {
      date?: string;
      content?: string;
    }
  • src/index.ts:113-130 (registration)
    MCP tool registration for 'create_daily_note', including Zod input schema validation and a thin handler that delegates to noteService.createDailyNote and formats the response.
    server.tool(
      'create_daily_note',
      {
        date: z.string().optional().describe('The date for the daily note (YYYY-MM-DD format)'),
        content: z.string().optional().describe('Initial content for the daily note'),
      },
      async ({ date, content }) => {
        const dailyNote = noteService.createDailyNote({ date, content });
        return {
          content: [
            {
              type: 'text',
              text: JSON.stringify(dailyNote, null, 2),
            },
          ],
        };
      }
    );
  • Export of the noteService object, making createDailyNote available for import and use in the MCP server.
    export const noteService = {
      getAllNotes,
      getNoteById,
      searchNotes,
      getNotesByFolder,
      createDailyNote,
      createNote,
      updateNote

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/bscott/noteplan-mcp'

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