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

# Calendar

> The connected Google Calendar.

11 tools. Each one is also a REST route and a CLI command, from the same definition: the same input, the same output, the same errors.

| Tool                                                | What it does                         | Kind                                                         |
| --------------------------------------------------- | ------------------------------------ | ------------------------------------------------------------ |
| [`get_calendar_event`](#get_calendar_event)         | Everything about one event           | Read · idempotent · calls Google Calendar API                |
| [`get_calendar_status`](#get_calendar_status)       | Whether Google Calendar is connected | Read · idempotent · no outside service                       |
| [`list_calendar_events`](#list_calendar_events)     | Events in a window                   | Read · idempotent · calls Google Calendar API                |
| [`list_calendars`](#list_calendars)                 | The calendars this account can see   | Read · idempotent · calls Google Calendar API                |
| [`create_calendar_event`](#create_calendar_event)   | Create an event                      | Write · calls Google Calendar API                            |
| [`delete_calendar_event`](#delete_calendar_event)   | Delete an event                      | Write · destructive · idempotent · calls Google Calendar API |
| [`disconnect_calendar`](#disconnect_calendar)       | Disconnect Google Calendar           | Write · destructive · idempotent · no outside service        |
| [`move_calendar_event`](#move_calendar_event)       | Reschedule an event                  | Write · idempotent · calls Google Calendar API               |
| [`rename_calendar_event`](#rename_calendar_event)   | Rename an event                      | Write · idempotent · calls Google Calendar API               |
| [`rsvp_to_calendar_event`](#rsvp_to_calendar_event) | Answer an invitation                 | Write · calls Google Calendar API                            |
| [`start_calendar_auth`](#start_calendar_auth)       | Begin the Google authorization       | Write · no outside service                                   |

## get\_calendar\_event

**Everything about one event.**

Guests, video link, location and description: what the list deliberately omits because it would be fetched for every event to show a few.

`meetLink` prefers Google's own conferencing data and falls back to a link found in the location or description, which is where a Zoom or Teams invitation usually is.

`canRsvp` and `canEdit` say what this account may do, so the app does not offer a button Google will refuse.

|           |                                                                                 |
| --------- | ------------------------------------------------------------------------------- |
| Kind      | Read · idempotent · calls Google Calendar API                                   |
| Auth      | Bearer token: a personal API token (`pc_…`) or an OAuth access token (`pcat_…`) |
| REST      | `GET https://api.doers.sh/v2/calendar/calendars/{calendarId}/events/{eventId}`  |
| CLI       | `doers calendar get-calendar-event`                                             |
| Touches   | no table directly                                                               |
| Operation | `getCalendarEvent`                                                              |

### Input

| Field               | Type   | Required | Default | Allowed values | Description                                           |
| ------------------- | ------ | -------- | ------- | -------------- | ----------------------------------------------------- |
| `calendarId` (path) | string | yes      |         |                | Google's calendar id. `primary` is the account's own. |
| `eventId` (path)    | string | yes      |         |                | Google's event id.                                    |

### Output

<Accordion title="Output fields">
  | Field                         | Type           | Allowed values | Description                                                    |
  | ----------------------------- | -------------- | -------------- | -------------------------------------------------------------- |
  | `event`                       | object \| null |                |                                                                |
  | `event.title`                 | string         |                |                                                                |
  | `event.description`           | string \| null |                |                                                                |
  | `event.location`              | string \| null |                |                                                                |
  | `event.htmlLink`              | string \| null |                | The event in Google Calendar.                                  |
  | `event.meetLink`              | string \| null |                | Video call, from Google's data or from the text.               |
  | `event.recurring`             | boolean        |                |                                                                |
  | `event.start`                 | string         |                |                                                                |
  | `event.end`                   | string         |                |                                                                |
  | `event.organizer`             | object \| null |                |                                                                |
  | `event.organizer.name`        | string         |                |                                                                |
  | `event.organizer.self`        | boolean        |                |                                                                |
  | `event.attendees`             | object\[]      |                |                                                                |
  | `event.attendees[].email`     | string         |                |                                                                |
  | `event.attendees[].name`      | string         |                |                                                                |
  | `event.attendees[].status`    | string         |                | Google's own value; `needsAction` when they have not answered. |
  | `event.attendees[].self`      | boolean        |                |                                                                |
  | `event.attendees[].organizer` | boolean        |                |                                                                |
  | `event.selfStatus`            | string \| null |                |                                                                |
  | `event.canRsvp`               | boolean        |                | You are a guest and not the organiser.                         |
  | `event.canEdit`               | boolean        |                | You organise it, so Google will accept a change.               |
</Accordion>

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "get_calendar_event",
      "arguments": {
        "calendarId": "5152790e-278e-4890-89f8-bfaa354b944e",
        "eventId": "b8e1f80b-d70a-4078-8c78-55a451731b74"
      }
    }
  }
  ```

  ```json Response theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
      "content": [
        {
          "type": "text",
          "text": "OK: Prepare the Acme quarterly review."
        }
      ],
      "structuredContent": {
        "event": {
          "title": "Prepare the Acme quarterly review",
          "description": "Notes for the Acme launch.",
          "location": "Notes for the Acme launch.",
          "htmlLink": "https://acme.example/brief",
          "meetLink": "https://acme.example/brief",
          "recurring": true,
          "start": "Notes for the Acme launch.",
          "end": "Notes for the Acme launch.",
          "organizer": {
            "name": "Acme",
            "self": true
          },
          "attendees": [
            {
              "email": "ada@acme.example",
              "name": "Acme",
              "status": "Notes for the Acme launch.",
              "self": true,
              "organizer": true
            }
          ],
          "selfStatus": "Notes for the Acme launch.",
          "canRsvp": true,
          "canEdit": true
        }
      }
    }
  }
  ```

  ```bash CLI theme={null}
  doers calendar get-calendar-event --calendar-id 5152790e-278e-4890-89f8-bfaa354b944e --event-id b8e1f80b-d70a-4078-8c78-55a451731b74
  ```
</CodeGroup>

## get\_calendar\_status

**Whether Google Calendar is connected.**

`configured` means this deployment has a Google client, so connecting is possible. `connected` means the authorization has been completed. The refresh token is never returned.

|           |                                                                                 |
| --------- | ------------------------------------------------------------------------------- |
| Kind      | Read · idempotent · no outside service                                          |
| Auth      | Bearer token: a personal API token (`pc_…`) or an OAuth access token (`pcat_…`) |
| REST      | `GET https://api.doers.sh/v2/calendar`                                          |
| CLI       | `doers calendar get-calendar-status`                                            |
| Touches   | `secrets`                                                                       |
| Operation | `getCalendarStatus`                                                             |

### Input

This tool takes no arguments.

### Output

<Accordion title="Output fields">
  | Field        | Type    | Allowed values | Description |
  | ------------ | ------- | -------------- | ----------- |
  | `configured` | boolean |                |             |
  | `connected`  | boolean |                |             |
</Accordion>

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "get_calendar_status",
      "arguments": {}
    }
  }
  ```

  ```json Response theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
      "content": [
        {
          "type": "text",
          "text": "Connected."
        }
      ],
      "structuredContent": {
        "configured": true,
        "connected": true
      }
    }
  }
  ```

  ```bash CLI theme={null}
  doers calendar get-calendar-status
  ```
</CodeGroup>

## list\_calendar\_events

**Events in a window.**

Events from the chosen calendars between two instants, recurrences already expanded into their occurrences. Cancelled events are left out.

Without `calendarIds`, only the primary calendar is read. At most 25 calendars per call.

A calendar that refuses the read is skipped rather than failing the whole window: one calendar the account lost access to must not blank the day.

|           |                                                                                 |
| --------- | ------------------------------------------------------------------------------- |
| Kind      | Read · idempotent · calls Google Calendar API                                   |
| Auth      | Bearer token: a personal API token (`pc_…`) or an OAuth access token (`pcat_…`) |
| REST      | `GET https://api.doers.sh/v2/calendar/events`                                   |
| CLI       | `doers calendar list-calendar-events`                                           |
| Touches   | no table directly                                                               |
| Operation | `listCalendarEvents`                                                            |

### Input

| Field                 | Type      | Required | Default | Allowed values   | Description                                           |
| --------------------- | --------- | -------- | ------- | ---------------- | ----------------------------------------------------- |
| `timeMin` (query)     | string    | yes      |         | ISO 8601 instant | Start of the window, inclusive.                       |
| `timeMax` (query)     | string    | yes      |         | ISO 8601 instant | End of the window, exclusive.                         |
| `calendarIds` (query) | string\[] | no       |         | at most 25 items | Google's calendar id. `primary` is the account's own. |

### Output

<Accordion title="Output fields">
  | Field                 | Type      | Allowed values | Description                                          |
  | --------------------- | --------- | -------------- | ---------------------------------------------------- |
  | `connected`           | boolean   |                |                                                      |
  | `events`              | object\[] |                |                                                      |
  | `events[].id`         | string    |                | `calendarId:eventId`, unique across the window.      |
  | `events[].eventId`    | string    |                |                                                      |
  | `events[].calendarId` | string    |                |                                                      |
  | `events[].title`      | string    |                |                                                      |
  | `events[].start`      | string    |                | RFC 3339 instant, or a date when `allDay`.           |
  | `events[].end`        | string    |                | Exclusive. A date when `allDay`.                     |
  | `events[].allDay`     | boolean   |                |                                                      |
  | `events[].canEdit`    | boolean   |                | Provider-derived permission to move this occurrence. |
</Accordion>

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "list_calendar_events",
      "arguments": {
        "timeMin": "2026-09-22T09:30:00.000Z",
        "timeMax": "2026-09-22T09:30:00.000Z"
      }
    }
  }
  ```

  ```json Response theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
      "content": [
        {
          "type": "text",
          "text": "1 event(s)."
        }
      ],
      "structuredContent": {
        "connected": true,
        "events": [
          {
            "id": "b8e1f80b-d70a-4078-8c78-55a451731b74",
            "eventId": "b8e1f80b-d70a-4078-8c78-55a451731b74",
            "calendarId": "5152790e-278e-4890-89f8-bfaa354b944e",
            "title": "Prepare the Acme quarterly review",
            "start": "Notes for the Acme launch.",
            "end": "Notes for the Acme launch.",
            "allDay": true,
            "canEdit": true
          }
        ]
      }
    }
  }
  ```

  ```bash CLI theme={null}
  doers calendar list-calendar-events --time-min 2026-09-22T09:30:00.000Z --time-max 2026-09-22T09:30:00.000Z
  ```
</CodeGroup>

## list\_calendars

**The calendars this account can see.**

The account's calendar list, primary first and then by name. Returns an empty list with `connected: false` rather than an error when Google is not connected: not being connected is a state the app draws, not a failure.

|           |                                                                                 |
| --------- | ------------------------------------------------------------------------------- |
| Kind      | Read · idempotent · calls Google Calendar API                                   |
| Auth      | Bearer token: a personal API token (`pc_…`) or an OAuth access token (`pcat_…`) |
| REST      | `GET https://api.doers.sh/v2/calendar/calendars`                                |
| CLI       | `doers calendar list-calendars`                                                 |
| Touches   | no table directly                                                               |
| Operation | `listCalendars`                                                                 |

### Input

This tool takes no arguments.

### Output

<Accordion title="Output fields">
  | Field                  | Type           | Allowed values | Description                                         |
  | ---------------------- | -------------- | -------------- | --------------------------------------------------- |
  | `connected`            | boolean        |                |                                                     |
  | `calendars`            | object\[]      |                |                                                     |
  | `calendars[].id`       | string         |                |                                                     |
  | `calendars[].name`     | string         |                |                                                     |
  | `calendars[].color`    | string \| null |                | Google's own colour, as a hex string.               |
  | `calendars[].primary`  | boolean        |                |                                                     |
  | `calendars[].canWrite` | boolean        |                | Google says this account may write to the calendar. |
</Accordion>

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "list_calendars",
      "arguments": {}
    }
  }
  ```

  ```json Response theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
      "content": [
        {
          "type": "text",
          "text": "- [5152790e-278e-4890-89f8-bfaa354b944e] Acme"
        }
      ],
      "structuredContent": {
        "connected": true,
        "calendars": [
          {
            "id": "5152790e-278e-4890-89f8-bfaa354b944e",
            "name": "Acme",
            "color": "#514ecb",
            "primary": true,
            "canWrite": true
          }
        ]
      }
    }
  }
  ```

  ```bash CLI theme={null}
  doers calendar list-calendars
  ```
</CodeGroup>

## create\_calendar\_event

**Create an event.**

Creates an event in the chosen calendar.

`allDay` sends dates rather than instants, and the end is **exclusive**: a single all-day event ends the following day, which is how Google models it.

`meet` asks Google to mint a real Meet link; the response carries it.

Guests are emailed only when there are guests: notifying nobody still costs a round trip.

|           |                                                                                 |
| --------- | ------------------------------------------------------------------------------- |
| Kind      | Write · calls Google Calendar API                                               |
| Auth      | Bearer token: a personal API token (`pc_…`) or an OAuth access token (`pcat_…`) |
| REST      | `POST https://api.doers.sh/v2/calendar/calendars/{calendarId}/events`           |
| CLI       | `doers calendar create-event`                                                   |
| Touches   | no table directly                                                               |
| Operation | `createCalendarEvent`                                                           |

### Input

| Field               | Type      | Required | Default | Allowed values                         | Description                                           |
| ------------------- | --------- | -------- | ------- | -------------------------------------- | ----------------------------------------------------- |
| `calendarId` (path) | string    | yes      |         |                                        | Google's calendar id. `primary` is the account's own. |
| `summary`           | string    | yes      |         | 1 to 500 characters                    | *No description in the registry.*                     |
| `start`             | string    | yes      |         | ISO 8601 instant                       | *No description in the registry.*                     |
| `end`               | string    | yes      |         | ISO 8601 instant                       | *No description in the registry.*                     |
| `timeZone`          | string    | yes      |         |                                        | IANA zone, e.g. `Europe/Paris`.                       |
| `allDay`            | boolean   | no       | `false` |                                        | *No description in the registry.*                     |
| `description`       | string    | no       |         |                                        | *No description in the registry.*                     |
| `location`          | string    | no       |         |                                        | *No description in the registry.*                     |
| `attendees`         | string\[] | no       |         | at most 100 items, each: email address | *No description in the registry.*                     |
| `meet`              | boolean   | no       | `false` |                                        | Ask Google for a Meet link.                           |

### Output

<Accordion title="Output fields">
  | Field      | Type           | Allowed values | Description |
  | ---------- | -------------- | -------------- | ----------- |
  | `eventId`  | string \| null |                |             |
  | `htmlLink` | string \| null |                |             |
  | `meetLink` | string \| null |                |             |
</Accordion>

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "create_calendar_event",
      "arguments": {
        "calendarId": "5152790e-278e-4890-89f8-bfaa354b944e",
        "summary": "Notes for the Acme launch.",
        "start": "2026-09-22T09:30:00.000Z",
        "end": "2026-09-22T09:30:00.000Z",
        "timeZone": "Europe/Paris",
        "allDay": false,
        "description": "Notes for the Acme launch."
      }
    }
  }
  ```

  ```json Response theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
      "content": [
        {
          "type": "text",
          "text": "OK: event created: https://acme.example/brief."
        }
      ],
      "structuredContent": {
        "eventId": "b8e1f80b-d70a-4078-8c78-55a451731b74",
        "htmlLink": "https://acme.example/brief",
        "meetLink": "https://acme.example/brief"
      }
    }
  }
  ```

  ```bash CLI theme={null}
  doers calendar create-event 5152790e-278e-4890-89f8-bfaa354b944e "Notes for the Acme launch." --start 2026-09-22T09:30:00.000Z --end 2026-09-22T09:30:00.000Z --time-zone Europe/Paris --all-day false --description "Notes for the Acme launch."
  ```
</CodeGroup>

## delete\_calendar\_event

**Delete an event.**

Removes the event from Google. **This is not our archive**: there is no undo, and the guests lose it too.

An event already gone answers as a success, because the caller's intent is satisfied.

|           |                                                                                   |
| --------- | --------------------------------------------------------------------------------- |
| Kind      | Write · destructive · idempotent · calls Google Calendar API                      |
| Auth      | Bearer token: a personal API token (`pc_…`) or an OAuth access token (`pcat_…`)   |
| REST      | `DELETE https://api.doers.sh/v2/calendar/calendars/{calendarId}/events/{eventId}` |
| CLI       | `doers calendar delete-event`                                                     |
| Touches   | no table directly                                                                 |
| Operation | `deleteCalendarEvent`                                                             |

### Input

| Field               | Type    | Required | Default | Allowed values | Description                                           |
| ------------------- | ------- | -------- | ------- | -------------- | ----------------------------------------------------- |
| `calendarId` (path) | string  | yes      |         |                | Google's calendar id. `primary` is the account's own. |
| `eventId` (path)    | string  | yes      |         |                | Google's event id.                                    |
| `notify` (query)    | boolean | no       | `true`  |                | Email the guests.                                     |

### Output

<Accordion title="Output fields">
  | Field     | Type   | Allowed values | Description |
  | --------- | ------ | -------------- | ----------- |
  | `eventId` | string |                |             |
</Accordion>

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "delete_calendar_event",
      "arguments": {
        "calendarId": "5152790e-278e-4890-89f8-bfaa354b944e",
        "eventId": "b8e1f80b-d70a-4078-8c78-55a451731b74",
        "notify": true
      }
    }
  }
  ```

  ```json Response theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
      "content": [
        {
          "type": "text",
          "text": "OK: event deleted."
        }
      ],
      "structuredContent": {
        "eventId": "b8e1f80b-d70a-4078-8c78-55a451731b74"
      }
    }
  }
  ```

  ```bash CLI theme={null}
  doers calendar delete-event 5152790e-278e-4890-89f8-bfaa354b944e b8e1f80b-d70a-4078-8c78-55a451731b74 --notify true
  ```
</CodeGroup>

## disconnect\_calendar

**Disconnect Google Calendar.**

Forgets the refresh token, so nothing further can be read. Reconnecting is one authorization away: there is nothing to re-enter.

|           |                                                                                 |
| --------- | ------------------------------------------------------------------------------- |
| Kind      | Write · destructive · idempotent · no outside service                           |
| Auth      | Bearer token: a personal API token (`pc_…`) or an OAuth access token (`pcat_…`) |
| REST      | `DELETE https://api.doers.sh/v2/calendar`                                       |
| CLI       | `doers calendar disconnect`                                                     |
| Touches   | `secrets`                                                                       |
| Operation | `disconnectCalendar`                                                            |

### Input

This tool takes no arguments.

### Output

<Accordion title="Output fields">
  | Field       | Type    | Allowed values | Description |
  | ----------- | ------- | -------------- | ----------- |
  | `connected` | boolean | `false`        |             |
</Accordion>

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "disconnect_calendar",
      "arguments": {}
    }
  }
  ```

  ```json Response theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
      "content": [
        {
          "type": "text",
          "text": "OK: Google Calendar disconnected."
        }
      ],
      "structuredContent": {
        "connected": false
      }
    }
  }
  ```

  ```bash CLI theme={null}
  doers calendar disconnect
  ```
</CodeGroup>

## move\_calendar\_event

**Reschedule an event.**

Moves an event to new times: what dragging it in the calendar does. Guests are notified.

|           |                                                                                           |
| --------- | ----------------------------------------------------------------------------------------- |
| Kind      | Write · idempotent · calls Google Calendar API                                            |
| Auth      | Bearer token: a personal API token (`pc_…`) or an OAuth access token (`pcat_…`)           |
| REST      | `PATCH https://api.doers.sh/v2/calendar/calendars/{calendarId}/events/{eventId}/schedule` |
| CLI       | `doers calendar move-event`                                                               |
| Touches   | no table directly                                                                         |
| Operation | `moveCalendarEvent`                                                                       |

### Input

| Field               | Type   | Required | Default | Allowed values   | Description                                           |
| ------------------- | ------ | -------- | ------- | ---------------- | ----------------------------------------------------- |
| `calendarId` (path) | string | yes      |         |                  | Google's calendar id. `primary` is the account's own. |
| `eventId` (path)    | string | yes      |         |                  | Google's event id.                                    |
| `start`             | string | yes      |         | ISO 8601 instant | *No description in the registry.*                     |
| `end`               | string | yes      |         | ISO 8601 instant | *No description in the registry.*                     |
| `timeZone`          | string | yes      |         |                  | IANA zone, e.g. `Europe/Paris`.                       |

### Output

<Accordion title="Output fields">
  | Field     | Type   | Allowed values | Description |
  | --------- | ------ | -------------- | ----------- |
  | `eventId` | string |                |             |
</Accordion>

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "move_calendar_event",
      "arguments": {
        "calendarId": "5152790e-278e-4890-89f8-bfaa354b944e",
        "eventId": "b8e1f80b-d70a-4078-8c78-55a451731b74",
        "start": "2026-09-22T09:30:00.000Z",
        "end": "2026-09-22T09:30:00.000Z",
        "timeZone": "Europe/Paris"
      }
    }
  }
  ```

  ```json Response theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
      "content": [
        {
          "type": "text",
          "text": "OK: event rescheduled."
        }
      ],
      "structuredContent": {
        "eventId": "b8e1f80b-d70a-4078-8c78-55a451731b74"
      }
    }
  }
  ```

  ```bash CLI theme={null}
  doers calendar move-event 5152790e-278e-4890-89f8-bfaa354b944e b8e1f80b-d70a-4078-8c78-55a451731b74 --start 2026-09-22T09:30:00.000Z --end 2026-09-22T09:30:00.000Z --time-zone Europe/Paris
  ```
</CodeGroup>

## rename\_calendar\_event

**Rename an event.**

Changes the title. Guests are notified, because the title is what they see.

|           |                                                                                  |
| --------- | -------------------------------------------------------------------------------- |
| Kind      | Write · idempotent · calls Google Calendar API                                   |
| Auth      | Bearer token: a personal API token (`pc_…`) or an OAuth access token (`pcat_…`)  |
| REST      | `PATCH https://api.doers.sh/v2/calendar/calendars/{calendarId}/events/{eventId}` |
| CLI       | `doers calendar rename-event`                                                    |
| Touches   | no table directly                                                                |
| Operation | `renameCalendarEvent`                                                            |

### Input

| Field               | Type   | Required | Default | Allowed values      | Description                                           |
| ------------------- | ------ | -------- | ------- | ------------------- | ----------------------------------------------------- |
| `calendarId` (path) | string | yes      |         |                     | Google's calendar id. `primary` is the account's own. |
| `eventId` (path)    | string | yes      |         |                     | Google's event id.                                    |
| `summary`           | string | yes      |         | 1 to 500 characters | *No description in the registry.*                     |

### Output

<Accordion title="Output fields">
  | Field     | Type   | Allowed values | Description |
  | --------- | ------ | -------------- | ----------- |
  | `eventId` | string |                |             |
</Accordion>

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "rename_calendar_event",
      "arguments": {
        "calendarId": "5152790e-278e-4890-89f8-bfaa354b944e",
        "eventId": "b8e1f80b-d70a-4078-8c78-55a451731b74",
        "summary": "Notes for the Acme launch."
      }
    }
  }
  ```

  ```json Response theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
      "content": [
        {
          "type": "text",
          "text": "OK: event renamed."
        }
      ],
      "structuredContent": {
        "eventId": "b8e1f80b-d70a-4078-8c78-55a451731b74"
      }
    }
  }
  ```

  ```bash CLI theme={null}
  doers calendar rename-event 5152790e-278e-4890-89f8-bfaa354b944e b8e1f80b-d70a-4078-8c78-55a451731b74 "Notes for the Acme launch."
  ```
</CodeGroup>

## rsvp\_to\_calendar\_event

**Answer an invitation.**

Sets **your own** attendance and tells the organiser.

The event is read back first so only your own line changes: Google's attendee list is patched whole, and sending a shortened one would drop every other guest.

|           |                                                                                      |
| --------- | ------------------------------------------------------------------------------------ |
| Kind      | Write · calls Google Calendar API                                                    |
| Auth      | Bearer token: a personal API token (`pc_…`) or an OAuth access token (`pcat_…`)      |
| REST      | `POST https://api.doers.sh/v2/calendar/calendars/{calendarId}/events/{eventId}/rsvp` |
| CLI       | `doers calendar rsvp`                                                                |
| Touches   | no table directly                                                                    |
| Operation | `rsvpToCalendarEvent`                                                                |

### Input

| Field               | Type   | Required | Default | Allowed values                      | Description                                           |
| ------------------- | ------ | -------- | ------- | ----------------------------------- | ----------------------------------------------------- |
| `calendarId` (path) | string | yes      |         |                                     | Google's calendar id. `primary` is the account's own. |
| `eventId` (path)    | string | yes      |         |                                     | Google's event id.                                    |
| `response`          | string | yes      |         | `accepted`, `declined`, `tentative` | An answer to an invitation.                           |

### Output

<Accordion title="Output fields">
  | Field      | Type   | Allowed values                      | Description                 |
  | ---------- | ------ | ----------------------------------- | --------------------------- |
  | `eventId`  | string |                                     |                             |
  | `response` | string | `accepted`, `declined`, `tentative` | An answer to an invitation. |
</Accordion>

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "rsvp_to_calendar_event",
      "arguments": {
        "calendarId": "5152790e-278e-4890-89f8-bfaa354b944e",
        "eventId": "b8e1f80b-d70a-4078-8c78-55a451731b74",
        "response": "accepted"
      }
    }
  }
  ```

  ```json Response theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
      "content": [
        {
          "type": "text",
          "text": "OK: accepted."
        }
      ],
      "structuredContent": {
        "eventId": "b8e1f80b-d70a-4078-8c78-55a451731b74",
        "response": "accepted"
      }
    }
  }
  ```

  ```bash CLI theme={null}
  doers calendar rsvp 5152790e-278e-4890-89f8-bfaa354b944e b8e1f80b-d70a-4078-8c78-55a451731b74 accepted
  ```
</CodeGroup>

## start\_calendar\_auth

**Begin the Google authorization.**

Returns the URL to open. It carries a one-time `state` bound to your account, which the callback checks before accepting anything: without it, a callback would accept a code obtained by somebody else.

|           |                                                                                 |
| --------- | ------------------------------------------------------------------------------- |
| Kind      | Write · no outside service                                                      |
| Auth      | Bearer token: a personal API token (`pc_…`) or an OAuth access token (`pcat_…`) |
| REST      | `POST https://api.doers.sh/v2/calendar/authorize`                               |
| CLI       | `doers calendar start-calendar-auth`                                            |
| Touches   | `secrets`                                                                       |
| Operation | `startCalendarAuth`                                                             |

### Input

This tool takes no arguments.

### Output

<Accordion title="Output fields">
  | Field | Type   | Allowed values | Description |
  | ----- | ------ | -------------- | ----------- |
  | `url` | string |                |             |
</Accordion>

### Example

<CodeGroup>
  ```json Request theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "start_calendar_auth",
      "arguments": {}
    }
  }
  ```

  ```json Response theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
      "content": [
        {
          "type": "text",
          "text": "Open this to authorize: https://acme.example/brief"
        }
      ],
      "structuredContent": {
        "url": "https://acme.example/brief"
      }
    }
  }
  ```

  ```bash CLI theme={null}
  doers calendar start-calendar-auth
  ```
</CodeGroup>
