Skip to main content
Glama

Create Calendar Event

create_calendar_event

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

TableJSON Schema
NameRequiredDescriptionDefault
notesNoEvent notes (optional)
titleYesEvent title
confirmNoMust be true to create the event
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)
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

TableJSON Schema
NameRequiredDescriptionDefault
idNo
endNoISO 8601 instant; for an all-day event, the last day (YYYY-MM-DD), present only when it spans more than one day
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_requestedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. 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)"
  2. 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"
      +}
  3. 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."
  4. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: attendees only work on CalDAV/Exchange calendars, and recurrence supports the four period types. It does not mention the confirm flag required to actually create the event, which is a notable behavioral rule left 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?

Four tight sentences, front-loaded with purpose, then requirements, then optional capabilities, then the alternative-tool routing. No filler; each clause carries distinct, actionable information.

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?

With annotations and an output schema present, the description needn't explain return values, and it covers the creation scope, required fields, and key constraints. It omits the confirm flag and calendar_id defaults, but those are fully specified in the 100%-covered schema, so coverage is nearly complete.

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 13 parameters in depth (timezone rules, all-day conventions, mutual exclusivity). The description restates only a few (recurrence values, attendees) and adds little beyond the schema, so baseline 3 applies.

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?

States a specific verb+resource ('Creates an event in the Mac's Calendar app') and scopes it to Calendar.app, distinguishing it clearly from update_calendar_event and list_calendar_events. It also explicitly names the sibling it is not (m365_create_event) for the Microsoft 365 case.

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?

Names the alternative ('For Microsoft 365 use m365_create_event instead') with the exact condition that selects it, and states the required inputs plus the option to invite attendees or set recurrence. Routing is unambiguous without opening either schema.

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