> ## Documentation Index
> Fetch the complete documentation index at: https://docs.langmail.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Calendar workflows

> End-to-end calendar tasks through an agent — schedule meetings with invitations, create recurring series, reschedule, cancel, and RSVP.

The calendar tools are read-write: your agent can create real events, invite real attendees, and respond to invitations on your behalf. Invitations and cancellations go out as standard iMIP emails, so attendees on any calendar system receive them.

Two identifiers flow between the tools:

* **`calendarUrl`** — a calendar's CalDAV URL, from [`list_calendars`](/reference/mcp/list-calendars). Optional everywhere; tools default to your default calendar.
* **`uid`** — an event's iCalendar UID, returned by [`create_calendar_event`](/reference/mcp/create-calendar-event) and [`list_calendar_events`](/reference/mcp/list-calendar-events). Required to update, delete, or RSVP.

## Schedule a meeting

```text Prompt theme={null}
Set up a 45-minute review with anna@example.com next Tuesday at 10:00 Berlin time.
```

```json Tool call — create_calendar_event theme={null}
{
  "title": "Review",
  "start": "2026-07-14T10:00:00+02:00",
  "end": "2026-07-14T10:45:00+02:00",
  "attendees": ["anna@example.com"]
}
```

```text Result theme={null}
Event "Review" created and invitations sent to 1 attendee(s): anna@example.com.
uid: 9b1de2a4-6f0e-4c8b-a1d2-3e4f5a6b7c8d@langmail.me
calendarUrl: https://mail.langmail.me/dav/cal/you/default/
```

Anna receives a standard calendar invitation she can accept from Google Calendar, Outlook, or anything else that speaks iCalendar.

## Create a recurring series

`recurrence` turns a single create call into a series. Use the structured form, or pass a raw RFC 5545 RRULE:

```text Prompt theme={null}
Create a weekly team standup, Mondays 9:00–9:15 Berlin time, with team@example.com.
```

```json Tool call — create_calendar_event theme={null}
{
  "title": "Team standup",
  "start": "2026-07-13T09:00:00+02:00",
  "end": "2026-07-13T09:15:00+02:00",
  "attendees": ["team@example.com"],
  "recurrence": { "frequency": "weekly", "byDay": ["MO"] }
}
```

`start` and `end` describe the first occurrence. Bound a series with either `until` (an instant) or `count` (number of occurrences) — not both.

## Reschedule or edit

Updates are full replacements: pass the complete event, not a diff. For a recurring event, an update edits the entire series — pass `recurrence` again to keep it recurring.

```json Tool call — update_calendar_event theme={null}
{
  "uid": "9b1de2a4-6f0e-4c8b-a1d2-3e4f5a6b7c8d@langmail.me",
  "title": "Review",
  "start": "2026-07-15T14:00:00+02:00",
  "end": "2026-07-15T14:45:00+02:00",
  "attendees": ["anna@example.com"]
}
```

Attendees are notified of the change automatically. Editing a single occurrence of a series is not supported — split it into separate events if one instance must differ.

## Cancel an event

```json Tool call — delete_calendar_event theme={null}
{ "uid": "9b1de2a4-6f0e-4c8b-a1d2-3e4f5a6b7c8d@langmail.me" }
```

Attendees receive iMIP cancellations.

## RSVP to an invitation

When someone invites *you*, the invitation lands in your calendar and your agent can answer it:

```text Prompt theme={null}
Accept the invite to Friday's planning meeting.
```

The agent finds the event's `uid` with `list_calendar_events`, then:

```json Tool call — respond_to_event theme={null}
{ "uid": "5f2e...@example.com", "response": "accept" }
```

```text Result theme={null}
RSVP'd accepted to "Planning".
```

The organizer is notified automatically. `respond_to_event` only sets your own attendance — it never modifies the event itself.

## Keep a workstream separate

A dedicated calendar keeps project events out of your personal one:

```json Tool call — create_calendar theme={null}
{ "name": "Marketing", "color": "#7FA6C9" }
```

```text Result theme={null}
Calendar "Marketing" created.
calendarUrl: https://mail.langmail.me/dav/cal/you/a1b2c3/
```

Pass that `calendarUrl` to `create_calendar_event` to add events to it. Calendars are plain CalDAV collections on the open-protocol surface — see [Open protocols](/reference/protocols).
