Skip to main content
Glama

create_calendar_event

Creates a single, one-off calendar event on the household calendar. Timed events need startDateTime; all-day events need startDate (plus endDate for several days). Set reminders with reminderOffsetMinutes. For a repeating schedule use create_recurring_calendar_event instead.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
notesNoFreeform notes.
titleYesTitle shown in calendar views.
endDateNoAll-day only: LAST day, inclusive, YYYY-MM-DD. Omit for a single day. The event may cover at most 366 days, between 1900 and 2200.
isAllDayYesTrue for all-day, false for timed.
locationNoWhere it happens. $type 'Address' takes line1-3/postalCode/countryCode; 'OnlineLocation' takes url/notes.
timezoneNoIANA zone for the wall-clock times, e.g. 'Europe/London'. Null means UTC. Not stored when an all-day event is sent with startDate.
startDateNoAll-day only (preferred for all-day): first day, YYYY-MM-DD. Takes precedence over startDateTime. Stored as startDateTime 00:00Z on this day, with endDateTime 00:00Z on the last day (null for a single day).
descriptionNoLonger description.
endDateTimeNoEnd of a timed event, ISO 8601 UTC. Must not precede startDateTime. For all-day events send endDate instead. An all-day event sent with endDateTime and no startDate stores it as given, and a midnight endDateTime then names the LAST day (inclusive).
startDateTimeNoStart of a timed event, ISO 8601 UTC with a Z suffix. For an all-day event send startDate instead; when startDate is present this is ignored.
reminderOffsetMinutesNoReminder lead times, in minutes before the event starts. Each value is whole hours, 60-1380 (1-23 hours), or whole days, a multiple of 1440 up to 525600 (365 days); a week is 10080. Up to 5 values. An all-day event counts from 00:00 on its first day, so 300 (5 hours) is 19:00 the evening before. Day and week reminders arrive at 19:00 on the earlier day; hour reminders arrive that many hours before the start, or up to 15 minutes earlier. Every household member is reminded.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
itemsYes
titleNo
messageNo
variantNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "description": "Annual checkup with Dr. Smith",
      -    "endDateTime": "2026-08-03T15:30:00Z",
      -    "isAllDay": false,
      -    "location": {
      -      "$type": "Address",
      -      "countryCode": "GB",
      -      "line1": "221B Baker Street",
      -      "postalCode": "NW1 6XE"
      -    },
      -    "notes": "Bring insurance card",
      -    "startDateTime": "2026-08-03T14:30:00Z",
      -    "timezone": "Europe/London",
      -    "title": "Dentist appointment"
      -  }
      -]New value: +[
      +  {
      +    "description": "Annual checkup with Dr. Smith",
      +    "endDateTime": "2026-08-03T15:30:00Z",
      +    "isAllDay": false,
      +    "location": {
      +      "$type": "Address",
      +      "countryCode": "GB",
      +      "line1": "221B Baker Street",
      +      "postalCode": "NW1 6XE"
      +    },
      +    "notes": "Bring insurance card",
      +    "reminderOffsetMinutes": [
      +      60,
      +      1440
      +    ],
      +    "startDateTime": "2026-08-03T14:30:00Z",
      +    "timezone": "Europe/London",
      +    "title": "Dentist appointment"
      +  },
      +  {
      +    "endDate": "2026-10-30",
      +    "isAllDay": true,
      +    "startDate": "2026-10-26",
      +    "title": "Half term"
      +  }
      +]
    • addedInput schema / properties / endDate
      Added value: +{
      +  "description": "All-day only: LAST day, inclusive, YYYY-MM-DD. Omit for a single day. The event may cover at most 366 days, between 1900 and 2200.",
      +  "examples": [
      +    "2026-08-05"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / endDateTime / description
      Previous value: -"End, ISO 8601 UTC. Must not precede startDateTime."New value: +"End of a timed event, ISO 8601 UTC. Must not precede startDateTime. For all-day events send endDate instead. An all-day event sent with endDateTime and no startDate stores it as given, and a midnight endDateTime then names the LAST day (inclusive)."
    • addedInput schema / properties / reminderOffsetMinutes
      Added value: +{
      +  "description": "Reminder lead times, in minutes before the event starts. Each value is whole hours, 60-1380 (1-23 hours), or whole days, a multiple of 1440 up to 525600 (365 days); a week is 10080. Up to 5 values. An all-day event counts from 00:00 on its first day, so 300 (5 hours) is 19:00 the evening before. Day and week reminders arrive at 19:00 on the earlier day; hour reminders arrive that many hours before the start, or up to 15 minutes earlier. Every household member is reminded.",
      +  "examples": [
      +    [
      +      1440,
      +      10080
      +    ]
      +  ],
      +  "items": {
      +    "description": "One lead time in minutes: whole hours 60-1380, or a multiple of 1440 for days.",
      +    "examples": [
      +      1440
      +    ],
      +    "maximum": 525600,
      +    "minimum": 60,
      +    "multipleOf": 60,
      +    "type": "integer"
      +  },
      +  "maxItems": 5,
      +  "type": "array",
      +  "uniqueItems": true
      +}
    • addedInput schema / properties / startDate
      Added value: +{
      +  "description": "All-day only (preferred for all-day): first day, YYYY-MM-DD. Takes precedence over startDateTime. Stored as startDateTime 00:00Z on this day, with endDateTime 00:00Z on the last day (null for a single day).",
      +  "examples": [
      +    "2026-08-03"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / startDateTime / description
      Previous value: -"Start, ISO 8601 UTC with a Z suffix."New value: +"Start of a timed event, ISO 8601 UTC with a Z suffix. For an all-day event send startDate instead; when startDate is present this is ignored."
    • changedInput schema / properties / timezone / description
      Previous value: -"IANA zone for the wall-clock times, e.g. 'Europe/London'. Null means UTC."New value: +"IANA zone for the wall-clock times, e.g. 'Europe/London'. Null means UTC. Not stored when an all-day event is sent with startDate."
    • changedInput schema / required
      Previous value: -[
      -  "title",
      -  "startDateTime",
      -  "isAllDay"
      -]New value: +[
      +  "title",
      +  "isAllDay"
      +]
  2. Changed19 schema fields changed
    • changedInput schema / properties / description / description
      Previous value: -"Longer free-text description of the event. Up to 2000 characters."New value: +"Longer description."
    • changedInput schema / properties / endDateTime / description
      Previous value: -"ISO 8601 date-time in UTC (Z-suffix). Must not be before startDateTime."New value: +"End, ISO 8601 UTC. Must not precede startDateTime."
    • changedInput schema / properties / isAllDay / description
      Previous value: -"True for an all-day event with no specific start/end time; false for a timed event."New value: +"True for all-day, false for timed."
    • changedInput schema / properties / location / description
      Previous value: -"Location. Set $type to 'Address' for physical (with line1-3, postalCode, countryCode) or 'OnlineLocation' for virtual (with url, notes)."New value: +"Where it happens. $type 'Address' takes line1-3/postalCode/countryCode; 'OnlineLocation' takes url/notes."
    • changedInput schema / properties / location / properties / $type / description
      Previous value: -"Location type discriminator"New value: +"Which location shape this is."
    • addedInput schema / properties / location / properties / $type / examples
      Added value: +[
      +  "Address"
      +]
    • changedInput schema / properties / location / properties / countryCode / description
      Previous value: -"Country code for the address (Address type)."New value: +"ISO country code, e.g. GB."
    • changedInput schema / properties / location / properties / line1 / description
      Previous value: -"First line of the street address (Address type). At least one of line1-3/postalCode is required when $type is 'Address'."New value: +"Address line 1. An Address needs one of line1-3 or postalCode."
    • changedInput schema / properties / location / properties / line2 / description
      Previous value: -"Second line of the street address (Address type), e.g. building or suite."New value: +"Address line 2, e.g. flat or suite."
    • changedInput schema / properties / location / properties / line3 / description
      Previous value: -"Third line of the street address (Address type)."New value: +"Address line 3."
    • addedInput schema / properties / location / properties / line3 / examples
      Added value: +[
      +  "London"
      +]
    • changedInput schema / properties / location / properties / notes / description
      Previous value: -"Notes about the location, e.g. parking instructions or a meeting passcode. Up to 500 characters for OnlineLocation."New value: +"Access detail, e.g. parking or passcode."
    • addedInput schema / properties / location / properties / notes / examples
      Added value: +[
      +  "Parking on level 2"
      +]
    • changedInput schema / properties / location / properties / postalCode / description
      Previous value: -"Postal or ZIP code (Address type). Up to 20 characters."New value: +"Postal or ZIP code."
    • changedInput schema / properties / location / properties / url / description
      Previous value: -"URL for online locations (OnlineLocation type). Must be an absolute http/https URL."New value: +"Absolute http/https join link."
    • changedInput schema / properties / notes / description
      Previous value: -"Freeform notes attached to the event. Up to 5000 characters."New value: +"Freeform notes."
    • changedInput schema / properties / startDateTime / description
      Previous value: -"ISO 8601 date-time in UTC (Z-suffix). The wall clock is interpreted against the supplied timezone if any."New value: +"Start, ISO 8601 UTC with a Z suffix."
    • changedInput schema / properties / timezone / description
      Previous value: -"IANA timezone id (e.g. 'Europe/London') describing the wall-clock zone of startDateTime/endDateTime; null = UTC."New value: +"IANA zone for the wall-clock times, e.g. 'Europe/London'. Null means UTC."
    • changedInput schema / properties / title / description
      Previous value: -"Event title/summary shown in calendar views. Required, up to 200 characters."New value: +"Title shown in calendar views."
  3. Changed25 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "description": "Annual checkup with Dr. Smith",
      +    "endDateTime": "2026-08-03T15:30:00Z",
      +    "isAllDay": false,
      +    "location": {
      +      "$type": "Address",
      +      "countryCode": "GB",
      +      "line1": "221B Baker Street",
      +      "postalCode": "NW1 6XE"
      +    },
      +    "notes": "Bring insurance card",
      +    "startDateTime": "2026-08-03T14:30:00Z",
      +    "timezone": "Europe/London",
      +    "title": "Dentist appointment"
      +  }
      +]
    • addedInput schema / properties / description / description
      Added value: +"Longer free-text description of the event. Up to 2000 characters."
    • addedInput schema / properties / description / examples
      Added value: +[
      +  "Annual checkup with Dr. Smith"
      +]
    • changedInput schema / properties / endDateTime / description
      Previous value: -"ISO 8601 date-time in UTC (Z-suffix)"New value: +"ISO 8601 date-time in UTC (Z-suffix). Must not be before startDateTime."
    • addedInput schema / properties / endDateTime / examples
      Added value: +[
      +  "2026-08-03T15:30:00Z"
      +]
    • addedInput schema / properties / isAllDay / description
      Added value: +"True for an all-day event with no specific start/end time; false for a timed event."
    • addedInput schema / properties / isAllDay / examples
      Added value: +[
      +  false
      +]
    • addedInput schema / properties / location / properties / countryCode / description
      Added value: +"Country code for the address (Address type)."
    • addedInput schema / properties / location / properties / countryCode / examples
      Added value: +[
      +  "GB"
      +]
    • addedInput schema / properties / location / properties / line1 / description
      Added value: +"First line of the street address (Address type). At least one of line1-3/postalCode is required when $type is 'Address'."
    • addedInput schema / properties / location / properties / line1 / examples
      Added value: +[
      +  "221B Baker Street"
      +]
    • addedInput schema / properties / location / properties / line2 / description
      Added value: +"Second line of the street address (Address type), e.g. building or suite."
    • addedInput schema / properties / location / properties / line2 / examples
      Added value: +[
      +  "Flat 3"
      +]
    • addedInput schema / properties / location / properties / line3 / description
      Added value: +"Third line of the street address (Address type)."
    • addedInput schema / properties / location / properties / notes / description
      Added value: +"Notes about the location, e.g. parking instructions or a meeting passcode. Up to 500 characters for OnlineLocation."
    • addedInput schema / properties / location / properties / postalCode / description
      Added value: +"Postal or ZIP code (Address type). Up to 20 characters."
    • addedInput schema / properties / location / properties / postalCode / examples
      Added value: +[
      +  "NW1 6XE"
      +]
    • changedInput schema / properties / location / properties / url / description
      Previous value: -"URL for online locations"New value: +"URL for online locations (OnlineLocation type). Must be an absolute http/https URL."
    • addedInput schema / properties / location / properties / url / examples
      Added value: +[
      +  "https://meet.google.com/abc-defg-hij"
      +]
    • addedInput schema / properties / notes / description
      Added value: +"Freeform notes attached to the event. Up to 5000 characters."
    • addedInput schema / properties / notes / examples
      Added value: +[
      +  "Bring insurance card"
      +]
    • addedInput schema / properties / startDateTime / examples
      Added value: +[
      +  "2026-08-03T14:30:00Z"
      +]
    • addedInput schema / properties / timezone / examples
      Added value: +[
      +  "Europe/London"
      +]
    • addedInput schema / properties / title / description
      Added value: +"Event title/summary shown in calendar views. Required, up to 200 characters."
    • addedInput schema / properties / title / examples
      Added value: +[
      +  "Dentist appointment"
      +]
  4. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only indicate non-destructive and non-read-only, which is minimal. The description adds context about field precedence (startDate takes precedence over startDateTime) and how reminders work for all-day events, which goes beyond the annotation. It doesn't mention side effects like reminders sent to all members, but that is in 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.

Conciseness4/5

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

The description is concise, around 50 words, and immediately states the core purpose. It front-loads the key distinction and points to the alternative. It could be more detailed on when to use but is efficient.

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 complexity (11 params, nested objects, output schema exists), the description provides essential guidance for the most common decision (timed vs all-day) and points to the sibling for recurring. There is an output schema, so return values are not needed. It is sufficient for an agent to select and invoke correctly, though more examples could help.

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

Parameters4/5

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

Schema coverage is 100% and highly descriptive, but the description still adds value by summarizing the key distinction between timed and all-day events and the precedence rule, which helps agents pick correct parameters without reading the entire schema. It doesn't duplicate the schema fully, so it adds clarity.

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 clearly states the tool creates a single, one-off calendar event on the household calendar, with specific action and resource. It also distinguishes from create_recurring_calendar_event, which is a sibling, making it clear what this tool does not do.

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 implicitly gives usage guidelines by differentiating from the recurring event alternative, and explicitly states when to use which fields for timed vs all-day events. However, it doesn't explicitly say 'use this for one-off events' but the phrasing 'single, one-off' and 'instead' for recurring implies it.

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