Skip to main content
Glama

reminders_create_reminder

Create reminders with title, optional due dates, and lists on macOS. Manage tasks by setting deadlines and organizing them into specific reminder lists.

Instructions

Create new reminder with title, optional due date and list

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
titleYesReminder title
due_dateNoDue date in format YYYY-MM-DD (optional)
listNoTarget reminder list name (optional, defaults to "Reminders")
notesNoReminder notes/body (optional)

Implementation Reference

  • The handler logic for the 'reminders_create_reminder' tool. It validates inputs, constructs a complex AppleScript command to parse the optional due date (YYYY-MM-DD format), create a new reminder in the specified list (default 'Reminders'), set title, notes, and due date, then executes it via osascript and returns the result.
    case 'reminders_create_reminder':
      try {
        const title = (args?.title as string) || '';
        const dueDate = (args?.due_date as string) || '';
        const listName = (args?.list as string) || 'Reminders';
        const notes = (args?.notes as string) || '';
        
        if (!title) {
          return {
            content: [
              {
                type: 'text',
                text: 'Error: title is required',
              },
            ],
          };
        }
    
        const command = `osascript -e 'on run {listName, reminderTitle, reminderNotes, dueDateStr}
          -- Parse date OUTSIDE the tell block
          set y to 0
          set m to 0
          set d to 0
          set hasDate to false
          
          if dueDateStr is not "" then
            set oldDelims to AppleScript'"'"'s text item delimiters
            set AppleScript'"'"'s text item delimiters to "-"
            set dateParts to text items of dueDateStr
            set AppleScript'"'"'s text item delimiters to oldDelims
            
            if (count of dateParts) is 3 then
              set y to item 1 of dateParts as integer
              set m to item 2 of dateParts as integer
              set d to item 3 of dateParts as integer
              set hasDate to true
            end if
          end if
    
          tell application "Reminders"
            set targetList to list listName
            set newReminder to make new reminder in targetList
            set name of newReminder to reminderTitle
            if reminderNotes is not "" then
              set body of newReminder to reminderNotes
            end if
            
            if hasDate then
              set myDate to current date
              set year of myDate to y
              set month of myDate to m
              set day of myDate to d
              set time of myDate to 0
              set due date of newReminder to myDate
            end if
            
            return "Reminder created: " & name of newReminder & " in list: " & name of targetList
          end tell
        end run' -- "${listName}" "${title}" "${notes}" "${dueDate}"`;
        
        const { stdout, stderr } = await execAsync(command);
        
        if (stderr.trim()) {
          return {
            content: [
              {
                type: 'text',
                text: `Error executing reminders create command: ${stderr.trim()}`,
              },
            ],
          };
        }
        
        return {
          content: [
            {
              type: 'text',
              text: stdout.trim(),
            },
          ],
        };
      } catch (error: any) {
        return {
          content: [
            {
              type: 'text',
              text: `Error executing reminder creation command: ${error.message}`,
            },
          ],
        };
      }
  • The input schema definition for the 'reminders_create_reminder' tool, registered in the ListTools response. Defines parameters: title (required), due_date (YYYY-MM-DD optional), list (optional, default Reminders), notes (optional).
      name: 'reminders_create_reminder',
      description: 'Create new reminder with title, optional due date and list',
      inputSchema: {
        type: 'object',
        properties: {
          title: {
            type: 'string',
            description: 'Reminder title',
          },
          due_date: {
            type: 'string',
            description: 'Due date in format YYYY-MM-DD (optional)',
          },
          list: {
            type: 'string',
            description: 'Target reminder list name (optional, defaults to "Reminders")',
          },
          notes: {
            type: 'string',
            description: 'Reminder notes/body (optional)',
          },
        },
        required: ['title'],
      },
    },
  • src/index.ts:27-358 (registration)
    The tool is registered by inclusion in the tools list returned by the ListToolsRequestHandler.
    server.setRequestHandler(ListToolsRequestSchema, async () => {
      return {
        tools: [
          {
            name: 'discover_apps',
            description: 'Discover AppleScript capabilities of a macOS application',
            inputSchema: {
              type: 'object',
              properties: {
                app_name: {
                  type: 'string',
                  description: 'Name of the macOS application to discover',
                },
                method: {
                  type: 'string',
                  description: 'Discovery method: basic, dictionary, properties, system_events, comprehensive',
                },
                destination: {
                  type: 'string',
                  description: 'Directory path to save discovery results',
                },
              },
              required: ['app_name', 'method', 'destination'],
            },
          },
          {
            name: 'finder_get_selection',
            description: 'Get currently selected files/folders in Finder',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'finder_get_current_folder',
            description: 'Get path of currently viewed folder in frontmost Finder window',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'mail_get_accounts',
            description: 'Get list of all Mail account names',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'mail_get_inbox_count',
            description: 'Get unread message count in inbox',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'mail_get_total_inbox_count',
            description: 'Get total message count in inbox',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'contacts_search_people',
            description: 'Search for people by name in Contacts',
            inputSchema: {
              type: 'object',
              properties: {
                search_term: {
                  type: 'string',
                  description: 'Name or part of name to search for',
                },
              },
              required: ['search_term'],
            },
          },
          {
            name: 'contacts_get_person_info',
            description: 'Get detailed information for a specific person',
            inputSchema: {
              type: 'object',
              properties: {
                person_name: {
                  type: 'string',
                  description: 'Full name of the person to get info for',
                },
              },
              required: ['person_name'],
            },
          },
          {
            name: 'reminders_get_lists',
            description: 'Get all reminder lists with reminder counts',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'reminders_get_incomplete_reminders',
            description: 'Get incomplete reminders across all lists',
            inputSchema: {
              type: 'object',
              properties: {
                limit: {
                  type: 'number',
                  description: 'Maximum number of reminders to return (default: 10)',
                },
              },
            },
          },
          {
            name: 'notes_get_folders',
            description: 'Get all note folders with note counts',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'notes_get_recent_notes',
            description: 'Get recently modified notes',
            inputSchema: {
              type: 'object',
              properties: {
                limit: {
                  type: 'number',
                  description: 'Maximum number of notes to return (default: 10)',
                },
              },
            },
          },
          {
            name: 'notes_search_notes',
            description: 'Search notes by title or content',
            inputSchema: {
              type: 'object',
              properties: {
                query: {
                  type: 'string',
                  description: 'Search query for note title or content',
                },
              },
              required: ['query'],
            },
          },
          {
            name: 'notes_create_note',
            description: 'Create new note with title and content',
            inputSchema: {
              type: 'object',
              properties: {
                title: {
                  type: 'string',
                  description: 'Note title',
                },
                content: {
                  type: 'string',
                  description: 'Note content/body',
                },
                folder: {
                  type: 'string',
                  description: 'Target folder name (optional, defaults to "Notes")',
                },
              },
              required: ['title', 'content'],
            },
          },
          {
            name: 'textedit_get_documents',
            description: 'Get list of open TextEdit documents',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'textedit_create_document',
            description: 'Create new TextEdit document with optional content',
            inputSchema: {
              type: 'object',
              properties: {
                content: {
                  type: 'string',
                  description: 'Optional initial content for the document',
                },
              },
            },
          },
          {
            name: 'calendar_get_calendars',
            description: 'Get all calendars with event counts',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'calendar_create_event',
            description: 'Create new calendar event',
            inputSchema: {
              type: 'object',
              properties: {
                title: {
                  type: 'string',
                  description: 'Event title/summary',
                },
                start_datetime: {
                  type: 'string',
                  description: 'Start date and time (YYYY-MM-DD HH:MM format)',
                },
                end_datetime: {
                  type: 'string',
                  description: 'End date and time (YYYY-MM-DD HH:MM format)',
                },
                calendar: {
                  type: 'string',
                  description: 'Target calendar name (optional, defaults to "Calendar")',
                },
                notes: {
                  type: 'string',
                  description: 'Event notes/description (optional)',
                },
              },
              required: ['title', 'start_datetime', 'end_datetime'],
            },
          },
          {
            name: 'calendar_get_today_events',
            description: 'Get today\'s events across all calendars',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'calendar_get_upcoming_events',
            description: 'Get upcoming events in date range',
            inputSchema: {
              type: 'object',
              properties: {
                days: {
                  type: 'number',
                  description: 'Number of days ahead to look (default: 7)',
                },
              },
            },
          },
          {
            name: 'workflow_contact_to_textedit',
            description: 'Get contact information and create formatted TextEdit document',
            inputSchema: {
              type: 'object',
              properties: {
                name: {
                  type: 'string',
                  description: 'Person name to look up',
                },
                title: {
                  type: 'string',
                  description: 'Document title (optional)',
                },
              },
              required: ['name'],
            },
          },
          {
            name: 'mail_create_message',
            description: 'Create new email message with recipients, subject, and body',
            inputSchema: {
              type: 'object',
              properties: {
                to: {
                  type: 'string',
                  description: 'Recipient email address',
                },
                subject: {
                  type: 'string',
                  description: 'Email subject',
                },
                body: {
                  type: 'string',
                  description: 'Email body content',
                },
                cc: {
                  type: 'string',
                  description: 'CC recipient email address (optional)',
                },
              },
              required: ['to', 'subject', 'body'],
            },
          },
          {
            name: 'mail_send_message',
            description: 'Send the most recently created message',
            inputSchema: {
              type: 'object',
              properties: {},
            },
          },
          {
            name: 'reminders_create_reminder',
            description: 'Create new reminder with title, optional due date and list',
            inputSchema: {
              type: 'object',
              properties: {
                title: {
                  type: 'string',
                  description: 'Reminder title',
                },
                due_date: {
                  type: 'string',
                  description: 'Due date in format YYYY-MM-DD (optional)',
                },
                list: {
                  type: 'string',
                  description: 'Target reminder list name (optional, defaults to "Reminders")',
                },
                notes: {
                  type: 'string',
                  description: 'Reminder notes/body (optional)',
                },
              },
              required: ['title'],
            },
          },
        ],
      };
    });
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool creates a reminder but doesn't describe what happens after creation (e.g., success/failure response, whether the reminder is immediately visible), permission requirements, or any side effects. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose ('Create new reminder') and lists key optional parameters. There is no wasted verbiage or redundancy, making it highly concise and well-structured for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a mutation with 4 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like error handling, response format, or integration with sibling tools (e.g., using 'reminders_get_lists' to validate the list parameter). The description meets minimal needs but leaves critical gaps for effective agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description mentions title, due date, and list parameters, but the input schema already has 100% coverage with clear descriptions for all four parameters (including notes). The description adds minimal value beyond the schema, as it doesn't explain parameter interactions or provide additional context like format examples beyond what's in the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create new reminder') and specifies the key attributes (title, optional due date and list). It distinguishes from sibling tools like 'reminders_get_incomplete_reminders' by focusing on creation rather than retrieval. However, it doesn't explicitly differentiate from other creation tools like 'notes_create_note' or 'calendar_create_event' beyond the domain context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing access to reminders), when not to use it (e.g., for updating existing reminders), or how it relates to sibling tools like 'reminders_get_lists' for list validation. Usage is implied by the creation context but not explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/samicokar/mcp-mac'

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