Skip to main content
Glama

Create Calendar Event

create_calendar_event
Destructive

Creates an event in the Mac's Calendar app (Calendar.app). Requires title, start_date, end_date. Optionally invite attendees by email (CalDAV/Exchange calendars only), or make it a repeating event with recurrence (daily/weekly/monthly/yearly). For Microsoft 365 use m365_create_event instead.

Input Schema

NameRequiredDescriptionDefault
notesNoEvent notes (optional)
titleYesEvent title
confirmNoNeeded only with attendees (the invitations are emails): must be true to create the event and send them. Without attendees it is ignored.
calendarNoCalendar name to match (optional, alternative to calendar_id)
end_dateYesISO 8601 date or datetime, same timezone rules as start_date. For an all-day event pass a bare date (end is inclusive: same date as start = a one-day all-day event; a later date spans through that day).
locationNoLocation (optional)
rememberNoWith confirm: true, also stop asking for this kind of action from now on. Only when the person said so ("don't ask again"). The person can revoke it in LMCP or with set_always_allowed.
attendeesNoList of email addresses to invite (optional, CalDAV/Exchange only)
recurrenceNoMake it a repeating event: 'daily', 'weekly', 'monthly', or 'yearly' (optional; omit for a one-time event).
start_dateYesISO 8601 date or datetime. With a time (2026-06-27T09:00:00) the event is timed; a time with NO timezone is read in the Mac's LOCAL zone, append Z or an offset (2026-06-27T09:00:00Z, or +02:00) to pin it to UTC/another zone. Pass a bare DATE (YYYY-MM-DD) for BOTH start_date and end_date to create an ALL-DAY event.
calendar_idNoCalendar UUID from list_calendar_names (optional, defaults to default calendar)
recurrence_countNoTotal number of occurrences (optional). Mutually exclusive with recurrence_until; if neither is given the event repeats indefinitely.
recurrence_untilNoISO 8601 date the repetition stops on (optional; takes precedence over recurrence_count).
recurrence_intervalNoRepeat every N periods (optional, default 1 — e.g. recurrence='weekly' + recurrence_interval=2 = every 2 weeks).

Output Schema

NameRequiredDescriptionDefault
idNo
endNoISO 8601 instant; for an all-day event, the last day (YYYY-MM-DD), inclusive: a one-day event ends on the day it starts
startNoISO 8601 instant; for an all-day event, the calendar date (YYYY-MM-DD)
titleNo
all_dayNoPresent and true for an all-day event
createdNo
recurrenceNoPresent when the event repeats (human-readable summary)
attendees_noteNo
attendees_statusNo"unconfirmed" when the event was created but Calendar was still adding the attendees at the time limit: check the event, do not create it again.
attendees_requestedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / confirm / description
      Previous value: -"Must be true to create the event"New value: +"Needed only with attendees (the invitations are emails): must be true to create the event and send them. Without attendees it is ignored."
    • addedInput schema / properties / remember
      Added value: +{
      +  "description": "With confirm: true, also stop asking for this kind of action from now on. Only when the person said so (\"don't ask again\"). The person can revoke it in LMCP or with set_always_allowed.",
      +  "type": "boolean"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / properties / end / description
      Previous value: -"ISO 8601 instant; for an all-day event, the last day (YYYY-MM-DD), present only when it spans more than one day"New value: +"ISO 8601 instant; for an all-day event, the last day (YYYY-MM-DD), inclusive: a one-day event ends on the day it starts"
  3. Changed1 schema field changed
    • addedOutput schema / properties / attendees_status
      Added value: +{
      +  "description": "\"unconfirmed\" when the event was created but Calendar was still adding the attendees at the time limit: check the event, do not create it again.",
      +  "type": "string"
      +}
  4. Changed3 schema fields changed
    • addedOutput schema / properties / all_day
      Added value: +{
      +  "description": "Present and true for an all-day event",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / end / description
      Added value: +"ISO 8601 instant; for an all-day event, the last day (YYYY-MM-DD), present only when it spans more than one day"
    • addedOutput schema / properties / start / description
      Added value: +"ISO 8601 instant; for an all-day event, the calendar date (YYYY-MM-DD)"
  5. Changed5 schema fields changed
    • addedInput schema / properties / recurrence
      Added value: +{
      +  "description": "Make it a repeating event: 'daily', 'weekly', 'monthly', or 'yearly' (optional; omit for a one-time event).",
      +  "type": "string"
      +}
    • addedInput schema / properties / recurrence_count
      Added value: +{
      +  "description": "Total number of occurrences (optional). Mutually exclusive with recurrence_until; if neither is given the event repeats indefinitely.",
      +  "type": "integer"
      +}
    • addedInput schema / properties / recurrence_interval
      Added value: +{
      +  "description": "Repeat every N periods (optional, default 1 — e.g. recurrence='weekly' + recurrence_interval=2 = every 2 weeks).",
      +  "type": "integer"
      +}
    • addedInput schema / properties / recurrence_until
      Added value: +{
      +  "description": "ISO 8601 date the repetition stops on (optional; takes precedence over recurrence_count).",
      +  "type": "string"
      +}
    • addedOutput schema / properties / recurrence
      Added value: +{
      +  "description": "Present when the event repeats (human-readable summary)",
      +  "type": "string"
      +}
  6. Changed2 schema fields changed
    • changedInput schema / properties / end_date / description
      Previous value: -"ISO 8601 datetime"New value: +"ISO 8601 date or datetime, same timezone rules as start_date. For an all-day event pass a bare date (end is inclusive: same date as start = a one-day all-day event; a later date spans through that day)."
    • changedInput schema / properties / start_date / description
      Previous value: -"ISO 8601 datetime (YYYY-MM-DDTHH:MM:SS)"New value: +"ISO 8601 date or datetime. With a time (2026-06-27T09:00:00) the event is timed; a time with NO timezone is read in the Mac's LOCAL zone, append Z or an offset (2026-06-27T09:00:00Z, or +02:00) to pin it to UTC/another zone. Pass a bare DATE (YYYY-MM-DD) for BOTH start_date and end_date to create an ALL-DAY event."
  7. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already disclose that this is a mutating, open-world, destructive operation, so the description does not need to repeat that safety profile. It adds useful behavioral context by identifying the Mac-specific target, the attendee-calendar limitation, and the M365 alternative, though it leaves the confirmation requirement for invitations to the schema.

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 front-loaded with the core action and is only three sentences long. Every sentence carries useful selection or capability information, with no filler.

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

Completeness4/5

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

Given the 14-parameter schema, full schema description coverage, annotations, and an output schema, the description is complete enough to guide correct invocation. Minor omissions such as the confirm-gate nuance and calendar selection are already covered by the schema.

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?

Schema description coverage is 100%, so the schema already documents all 14 parameters in detail. The description reinforces the three required fields and mentions attendees/recurrence, but adds little semantic detail beyond what the schema provides.

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

Purpose5/5

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

The description states a specific verb and resource: creating an event in the Mac Calendar app. It also distinguishes the tool from the Microsoft 365 sibling by naming m365_create_event as the alternative for M365.

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

Usage Guidelines5/5

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

It clearly frames when to use this tool (Mac Calendar events) and when to use the alternative (Microsoft 365). It also states the required fields and calls out that attendee invitations are limited to CalDAV/Exchange calendars.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources