Skip to main content
Glama

Create recurring meeting

create_recurring_meeting

Create a recurring meeting series with a template agenda, rejecting invalid frequency/end combinations before saving.

Instructions

Create a recurring meeting series: a schedule plus a template the occurrences copy.

For "set up a weekly sync Mondays at 9" requests. frequency/end_after combinations are validated locally before anything is sent, rejecting a bad combination with the allowed matrix spelled out.

Returns the created series in get_recurring_meeting's shape, including computed next occurrences (their start_time is what occurrence tools take) and template_meeting_id.

Pitfalls. The template meeting is created as a DRAFT: notes says so, and occurrences can't be initialized until update_meeting(meeting_id=<template_meeting_id>, state='open') publishes it. OpenProject also overwrites time_zone on create with its own account zone; this tool corrects it with a follow-up PATCH — if refused (needs 'edit meetings'), the series is still created and notes names the zone it runs in.

Cross-references: get_recurring_meeting reads it back; update_meeting(meeting_id=<template_meeting_id>, ...) builds the agenda and publishes it; init_recurring_meeting_occurrence materializes a slot; list_projects for the project id.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
titleYesSeries title, e.g. 'Weekly team sync'.
notifyNoEmails participants about schedule changes and cancellations; defaults to false (quiet).
end_dateNoLast date as 'YYYY-MM-DD'; only with end_after='specific_date'.
intervalNoEvery N days/weeks/months (default 1). Not applicable to 'working_days'.
locationNoRoom name or URL every occurrence inherits; omit for none.
end_afterNoHow the series ends: 'never' (the default), 'specific_date' (needs end_date) or 'iterations' (needs iterations).never
frequencyNoRepetition rule: 'daily', 'working_days', 'weekly' (default), 'monthly_day_of_month' (needs monthly_day) or 'monthly_nth_weekday' (needs monthly_ordinal + monthly_weekday).weekly
time_zoneYesIANA time zone the schedule computes in, e.g. 'Europe/Berlin'; decides what 'every Monday 09:00' means across DST. Validated locally — OpenProject would silently store a typo and fall back to the account's zone.
iterationsNoTotal occurrences (1-1000); only with end_after='iterations'.
project_idYesNumeric id or identifier of the project; needs the Meetings module and 'create meetings' permission.
start_timeYesFirst occurrence as ISO 8601 with a timezone: '2026-09-01T09:00:00Z' or '...+02:00'. Must be now or later; offset-less times are rejected locally.
monthly_dayNoDay of the month (1-31); only with frequency='monthly_day_of_month'.
monthly_ordinalNoWhich weekday of the month: 1-4, or -1 for the last one; only with frequency='monthly_nth_weekday'.
monthly_weekdayNoWeekday name ('monday'…'sunday'); only with frequency='monthly_nth_weekday'.
duration_minutesYesLength of each occurrence in minutes (90 = 1.5 hours); echoed as duration_hours.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idNoSeries id — what get_recurring_meeting and the occurrence tools take. Not a meeting id.
notesNoDegradation markers: an unreadable schedule, the occurrence cap, a time zone that could not be applied, a draft template.
titleNoSeries title.
authorNoUser who created the series.
projectNoProject the series belongs to.
end_dateNoLast possible date (ISO); only when end_after='specific_date'.
intervalNoEvery N days/weeks/months; always 1 for 'working_days'.
locationNoRoom name or meeting URL each occurrence inherits.
end_afterNo'never', 'specific_date' or 'iterations'.
frequencyNoRepetition rule: 'daily', 'working_days', 'weekly', 'monthly_day_of_month' or 'monthly_nth_weekday'.
time_zoneNoZone the schedule computes in, as OpenProject stores it (an IANA identifier or a Rails zone name).
iterationsNoTotal occurrences; only when end_after='iterations'.
start_timeNoFirst-occurrence start as ISO 8601 UTC.
monthly_dayNoDay of month (1-31); only for 'monthly_day_of_month'.
occurrencesNoThe next upcoming slots in order (capped; see 'notes'). meeting_id is null until a slot is instantiated, and state 'planned' marks exactly those.
duration_hoursNoLength of each occurrence in hours (1.5 = 90 minutes).
monthly_ordinalNoWhich weekday occurrence (1-4, -1 = last); only for 'monthly_nth_weekday'.
monthly_weekdayNoWeekday name; only for 'monthly_nth_weekday'.
template_meeting_idNoId of the template meeting the occurrences are copied from. Its agenda is edited with the regular meeting tools, and a freshly created template is a DRAFT — publish it with update_meeting(meeting_id=<this>, state='open') before initialising occurrences.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed13 schema fields changedv0.3.2
    • changedInput schema / properties / duration_minutes / description
      Previous value: -"Length of each occurrence in minutes (90 = one and a half hours). The result reports it back as duration_hours."New value: +"Length of each occurrence in minutes (90 = 1.5 hours); echoed as duration_hours."
    • changedInput schema / properties / end_date / description
      Previous value: -"Last possible date as 'YYYY-MM-DD'; required for, and only valid with, end_after='specific_date'."New value: +"Last date as 'YYYY-MM-DD'; only with end_after='specific_date'."
    • changedInput schema / properties / frequency / description
      Previous value: -"Repetition rule: 'daily', 'working_days' (every working day), 'weekly' (the default), 'monthly_day_of_month' (needs monthly_day) or 'monthly_nth_weekday' (needs monthly_ordinal + monthly_weekday)."New value: +"Repetition rule: 'daily', 'working_days', 'weekly' (default), 'monthly_day_of_month' (needs monthly_day) or 'monthly_nth_weekday' (needs monthly_ordinal + monthly_weekday)."
    • changedInput schema / properties / interval / description
      Previous value: -"Every N days/weeks/months (default 1 = every occurrence of the rule). Not applicable to 'working_days'."New value: +"Every N days/weeks/months (default 1). Not applicable to 'working_days'."
    • changedInput schema / properties / iterations / description
      Previous value: -"Total number of occurrences (1-1000); required for, and only valid with, end_after='iterations'."New value: +"Total occurrences (1-1000); only with end_after='iterations'."
    • changedInput schema / properties / location / description
      Previous value: -"Room name or meeting URL every occurrence inherits. Omit for none."New value: +"Room name or URL every occurrence inherits; omit for none."
    • changedInput schema / properties / monthly_day / description
      Previous value: -"Day of the month (1-31); required for, and only valid with, frequency='monthly_day_of_month'."New value: +"Day of the month (1-31); only with frequency='monthly_day_of_month'."
    • changedInput schema / properties / monthly_ordinal / description
      Previous value: -"Which weekday of the month: 1-4, or -1 for the last one; required for, and only valid with, frequency='monthly_nth_weekday'."New value: +"Which weekday of the month: 1-4, or -1 for the last one; only with frequency='monthly_nth_weekday'."
    • changedInput schema / properties / monthly_weekday / description
      Previous value: -"Weekday name ('monday'…'sunday'); required for, and only valid with, frequency='monthly_nth_weekday'."New value: +"Weekday name ('monday'…'sunday'); only with frequency='monthly_nth_weekday'."
    • changedInput schema / properties / notify / description
      Previous value: -"True emails participants about schedule changes and cancellations. Defaults to false — an API-created series stays quiet."New value: +"Emails participants about schedule changes and cancellations; defaults to false (quiet)."
    • changedInput schema / properties / project_id / description
      Previous value: -"Numeric id or identifier of the project the series belongs to. It must have the Meetings module enabled and this account needs the 'create meetings' permission in it."New value: +"Numeric id or identifier of the project; needs the Meetings module and 'create meetings' permission."
    • changedInput schema / properties / start_time / description
      Previous value: -"First occurrence as ISO 8601 WITH a timezone: '2026-09-01T09:00:00Z' or '2026-09-01T11:00:00+02:00'. Must be now or in the future; a time without an offset is rejected locally."New value: +"First occurrence as ISO 8601 with a timezone: '2026-09-01T09:00:00Z' or '...+02:00'. Must be now or later; offset-less times are rejected locally."
    • changedInput schema / properties / time_zone / description
      Previous value: -"IANA time zone the schedule computes in, e.g. 'Europe/Berlin' or 'Etc/UTC' — required, because it decides what 'every Monday 09:00' means across DST changes. Validated locally: OpenProject would store a typo silently and fall back to the account's zone."New value: +"IANA time zone the schedule computes in, e.g. 'Europe/Berlin'; decides what 'every Monday 09:00' means across DST. Validated locally — OpenProject would silently store a typo and fall back to the account's zone."
  2. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

Despite openWorldHint=true and no explicit side-effect annotations, the description discloses substantial behavioral nuance: the template is created as a DRAFT and occurrences cannot initialize until update_meeting sets state='open'; OpenProject overwrites time_zone on create and the tool compensates with a follow-up PATCH; and if the PATCH is refused for missing 'edit meetings' permission, the series is still created with the zone named in notes. This is exactly the depth a mutation tool needs.

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 long but densely actionable and front-loaded: purpose and use case first, then workflow, then pitfalls, then cross-references. Each named pitfall (DRAFT template, time_zone overwrite/PATCH fallback) earns its place given the 15-parameter, multi-step tool. It is not wasteful, though the cross-reference list could be trimmed; still, length is justified by complexity.

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

Completeness5/5

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

For a high-complexity tool with 15 params, a multi-step draft/publish lifecycle, and a known source-system overwrite bug, the description covers all core needs: purpose, validation rules, side effects, permission requirements, failure fallbacks, and return shape (delegated to get_recurring_meeting plus an output schema that exists). Nothing an agent needs to call it correctly is missing.

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%, so the baseline is 3. The description adds value beyond the schema by explaining the local validation of frequency/end_after combinations 'rejecting a bad combination with the allowed matrix spelled out,' and by detailing the time_zone behavior (validated locally because 'OpenProject would silently store a typo and fall back to the account's zone'). This elevates it above baseline without duplicating per-parameter docs.

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 opening line states a precise verb+resource: 'Create a recurring meeting series: a schedule plus a template the occurrences copy.' It gives a concrete usage example ('set up a weekly sync Mondays at 9') and is clearly distinguished from siblings like create_meeting and create_work_package by describing the series-plus-template model without naming them explicitly.

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

Usage Guidelines4/5

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

The description anchors usage with an explicit intention example and lays out the full lifecycle via cross-references: update_meeting to publish the template, init_recurring_meeting_occurrence to materialize slots, get_recurring_meeting to read back. It does not state a when-not-to-use exclusion (e.g., 'for a single occurrence use create_meeting'), relying instead on the workflow narrative, so it stops just short of a 5.

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

Deploy Server

Other Tools