Skip to main content
Glama

create_recurring_calendar_event

Create a recurring calendar event. It generates event instances on a schedule, each with the reminders set in reminderOffsetMinutes.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
notesNoNotes on each instance.
titleYesTitle of every generated instance.
endDateNoLast date an instance may fall on, YYYY-MM-DD.
durationNoLength of each instance, ISO 8601 duration e.g. 'PT30M'.
isAllDayNoTrue for all-day instances, false for timed. An all-day instance starts at midnight of its occurrence date in the template timezone (stored in UTC; omit startTime) and ends duration later (no end without a duration), so a duration of one day or more makes each instance span that many whole days.
locationNoWhere each instance happens. $type 'Address' takes line1-3/postalCode/countryCode; 'OnlineLocation' takes url/notes.
timezoneNoIANA zone for startTime, e.g. 'Europe/London'. Occurrences follow its DST.
startDateNoDate of the first instance, YYYY-MM-DD. Later ones repeat from it.
startTimeNoLocal start time, HH:mm:ss. Omit if there is no fixed time.
descriptionNoLonger description of each instance.
cronExpressionYesInterval as 'N Unit', Unit one of Day, Week, Month, Year, e.g. '2 Week'. Not cron syntax.
maxOccurrencesNoCap on instances generated.
reminderOffsetMinutesNoReminder lead times, in minutes before each occurrence starts. Each value is whole hours, 60-1380 (1-23 hours), or whole days, a multiple of 1440 up to 40320 (4 weeks, the most for a repeating item); 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. Changed3 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "cronExpression": "1 Week",
      -    "description": "Sync on sprint progress",
      -    "duration": "PT30M",
      -    "endDate": "2026-12-31",
      -    "isAllDay": false,
      -    "maxOccurrences": 20,
      -    "notes": "Bring your laptop",
      -    "startDate": "2026-08-03",
      -    "startTime": "09:00:00",
      -    "timezone": "Europe/London",
      -    "title": "Weekly team standup"
      -  }
      -]New value: +[
      +  {
      +    "cronExpression": "1 Week",
      +    "description": "Sync on sprint progress",
      +    "duration": "PT30M",
      +    "endDate": "2026-12-31",
      +    "isAllDay": false,
      +    "maxOccurrences": 20,
      +    "notes": "Bring your laptop",
      +    "reminderOffsetMinutes": [
      +      60
      +    ],
      +    "startDate": "2026-08-03",
      +    "startTime": "09:00:00",
      +    "timezone": "Europe/London",
      +    "title": "Weekly team standup"
      +  }
      +]
    • changedInput schema / properties / isAllDay / description
      Previous value: -"True for all-day instances, false for timed."New value: +"True for all-day instances, false for timed. An all-day instance starts at midnight of its occurrence date in the template timezone (stored in UTC; omit startTime) and ends duration later (no end without a duration), so a duration of one day or more makes each instance span that many whole days."
    • addedInput schema / properties / reminderOffsetMinutes
      Added value: +{
      +  "description": "Reminder lead times, in minutes before each occurrence starts. Each value is whole hours, 60-1380 (1-23 hours), or whole days, a multiple of 1440 up to 40320 (4 weeks, the most for a repeating item); 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": 40320,
      +    "minimum": 60,
      +    "multipleOf": 60,
      +    "type": "integer"
      +  },
      +  "maxItems": 5,
      +  "type": "array",
      +  "uniqueItems": true
      +}
  2. Changed26 schema fields changed
    • changedInput schema / properties / cronExpression / description
      Previous value: -"Recurrence interval, NOT a cron expression despite the field name. Format is 'N Unit' where N is a positive integer and Unit is one of Day, Week, Month, Year (case-sensitive), e.g. '1 Day', '2 Week', '1 Month', '1 Year'. Instances recur every N of the given unit starting from startDate."New value: +"Interval as 'N Unit', Unit one of Day, Week, Month, Year, e.g. '2 Week'. Not cron syntax."
    • changedInput schema / properties / description / description
      Previous value: -"Longer free-text description applied to every generated instance. Up to 2000 characters."New value: +"Longer description of each instance."
    • addedInput schema / properties / description / examples
      Added value: +[
      +  "Sync on sprint progress"
      +]
    • changedInput schema / properties / duration / description
      Previous value: -"Length of each instance, in ISO 8601 duration format."New value: +"Length of each instance, ISO 8601 duration e.g. 'PT30M'."
    • changedInput schema / properties / endDate / description
      Previous value: -"Last date on which instances may occur, YYYY-MM-DD format. Omit for no end date (bounded only by maxOccurrences, if set)."New value: +"Last date an instance may fall on, YYYY-MM-DD."
    • changedInput schema / properties / isAllDay / description
      Previous value: -"True if generated instances are all-day events with no specific start/end time; false for timed instances."New value: +"True for all-day instances, false for timed."
    • changedInput schema / properties / location / description
      Previous value: -"Location applied to every generated instance. Set $type to 'Address' for physical (with line1-3, postalCode, countryCode) or 'OnlineLocation' for virtual (with url, notes)."New value: +"Where each instance 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."
    • addedInput schema / properties / location / properties / line2 / examples
      Added value: +[
      +  "Flat 3"
      +]
    • 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 / maxOccurrences / description
      Previous value: -"Maximum number of instances to generate before recurrence stops. Omit for unlimited (bounded only by endDate, if set)."New value: +"Cap on instances generated."
    • changedInput schema / properties / notes / description
      Previous value: -"Freeform notes applied to every generated instance. Up to 5000 characters."New value: +"Notes on each instance."
    • addedInput schema / properties / notes / examples
      Added value: +[
      +  "Bring your laptop"
      +]
    • changedInput schema / properties / startDate / description
      Previous value: -"Anchor date the recurrence is calculated from, YYYY-MM-DD format. The first instance falls on this date (subject to startTime/timezone); later instances are startDate plus multiples of the cronExpression interval."New value: +"Date of the first instance, YYYY-MM-DD. Later ones repeat from it."
    • changedInput schema / properties / startTime / description
      Previous value: -"Time of day each instance starts, in HH:mm:ss format (local to timezone). Omit for an event with no fixed time."New value: +"Local start time, HH:mm:ss. Omit if there is no fixed time."
    • changedInput schema / properties / timezone / description
      Previous value: -"IANA timezone id (e.g. 'Europe/London') that startTime is in. Each generated occurrence's UTC instant respects this zone's DST."New value: +"IANA zone for startTime, e.g. 'Europe/London'. Occurrences follow its DST."
    • changedInput schema / properties / title / description
      Previous value: -"Event title/summary applied to every generated instance. Required, up to 200 characters."New value: +"Title of every generated instance."
  3. Changed32 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "cronExpression": "1 Week",
      +    "description": "Sync on sprint progress",
      +    "duration": "PT30M",
      +    "endDate": "2026-12-31",
      +    "isAllDay": false,
      +    "maxOccurrences": 20,
      +    "notes": "Bring your laptop",
      +    "startDate": "2026-08-03",
      +    "startTime": "09:00:00",
      +    "timezone": "Europe/London",
      +    "title": "Weekly team standup"
      +  }
      +]
    • changedInput schema / properties / cronExpression / description
      Previous value: -"Cron expression for recurrence. Format: minute hour dayOfMonth month dayOfWeek"New value: +"Recurrence interval, NOT a cron expression despite the field name. Format is 'N Unit' where N is a positive integer and Unit is one of Day, Week, Month, Year (case-sensitive), e.g. '1 Day', '2 Week', '1 Month', '1 Year'. Instances recur every N of the given unit starting from startDate."
    • addedInput schema / properties / cronExpression / examples
      Added value: +[
      +  "1 Week"
      +]
    • addedInput schema / properties / description / description
      Added value: +"Longer free-text description applied to every generated instance. Up to 2000 characters."
    • changedInput schema / properties / duration / description
      Previous value: -"Duration in ISO 8601 format, e.g. PT1H30M"New value: +"Length of each instance, in ISO 8601 duration format."
    • addedInput schema / properties / duration / examples
      Added value: +[
      +  "PT30M"
      +]
    • changedInput schema / properties / endDate / description
      Previous value: -"YYYY-MM-DD format"New value: +"Last date on which instances may occur, YYYY-MM-DD format. Omit for no end date (bounded only by maxOccurrences, if set)."
    • addedInput schema / properties / endDate / examples
      Added value: +[
      +  "2026-12-31"
      +]
    • addedInput schema / properties / isAllDay / description
      Added value: +"True if generated instances are all-day events with no specific start/end time; false for timed instances."
    • addedInput schema / properties / isAllDay / examples
      Added value: +[
      +  false
      +]
    • 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: +"Location applied to every generated instance. Set $type to 'Address' for physical (with line1-3, postalCode, countryCode) or 'OnlineLocation' for virtual (with url, notes)."
    • 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 / 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 / maxOccurrences / description
      Added value: +"Maximum number of instances to generate before recurrence stops. Omit for unlimited (bounded only by endDate, if set)."
    • addedInput schema / properties / maxOccurrences / examples
      Added value: +[
      +  20
      +]
    • addedInput schema / properties / notes / description
      Added value: +"Freeform notes applied to every generated instance. Up to 5000 characters."
    • changedInput schema / properties / startDate / description
      Previous value: -"YYYY-MM-DD format"New value: +"Anchor date the recurrence is calculated from, YYYY-MM-DD format. The first instance falls on this date (subject to startTime/timezone); later instances are startDate plus multiples of the cronExpression interval."
    • addedInput schema / properties / startDate / examples
      Added value: +[
      +  "2026-08-03"
      +]
    • changedInput schema / properties / startTime / description
      Previous value: -"Time of day in HH:mm:ss format"New value: +"Time of day each instance starts, in HH:mm:ss format (local to timezone). Omit for an event with no fixed time."
    • addedInput schema / properties / startTime / examples
      Added value: +[
      +  "09:00:00"
      +]
    • addedInput schema / properties / timezone / examples
      Added value: +[
      +  "Europe/London"
      +]
    • addedInput schema / properties / title / description
      Added value: +"Event title/summary applied to every generated instance. Required, up to 200 characters."
    • addedInput schema / properties / title / examples
      Added value: +[
      +  "Weekly team standup"
      +]
  4. First observed

TDQS

A4/5.0
Behavior4/5

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

The annotations only say readOnlyHint=false and destructiveHint=false, providing no behavioral detail. The description adds the non-obvious behavior that one call expands into multiple scheduled event instances, each carrying the reminder offsets from reminderOffsetMinutes. This is meaningful context beyond what the annotations express, though it stops short of describing side effects or validation behavior.

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?

Two short sentences with no filler. The main purpose is front-loaded in the first sentence, and the second sentence adds the key behavioral detail about recurrence and reminders without wasted words.

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?

The tool has 13 parameters, nested objects, and an output schema, but every parameter is documented in the schema, so the description mainly needs to orient the agent. It does so by stating recurrence and reminder behavior. The only real gap is not mentioning when to choose this over create_calendar_event, which is more a usage-guidance issue than a completeness issue.

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 input schema already documents all 13 parameters thoroughly. The main description only reiterates reminderOffsetMinutes and does not explain cronExpression or cross-field constraints beyond what the schema provides. Baseline 3 is appropriate because the description adds little over the schema.

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 names a specific verb ('Create') and resource ('recurring calendar event'), and adds that it 'generates event instances on a schedule,' which clearly distinguishes it from one-off tools like create_calendar_event and from recurring tasks like create_recurring_task. The purpose is unambiguous.

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

Usage Guidelines3/5

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

Use of the word 'recurring' and the phrase 'generates event instances on a schedule' implies when to use this tool. However, the description never explicitly contrasts it with create_calendar_event or states when not to use it, leaving sibling selection to inference.

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