# Google Calendar

## Links

- Product page URL: https://www.agentpmt.com/marketplace/google-calendar
- Product markdown URL: https://www.agentpmt.com/marketplace/google-calendar?format=agent-md
- Product JSON URL: https://www.agentpmt.com/marketplace/google-calendar?format=agent-json

## Overview

- Product ID: 6961b8314991c3b032310fca
- Vendor: Apoth3osis
- Type: function
- Unit type: request
- Price: 500 credits
- Categories: Automation, Sales Engagement & Outreach, Meeting & Calendar Scheduling, Marketing Automation, Content Management & Publishing, Task & Workflow Automation, Time Tracking & Resource Planning, Appointment & Scheduling
- Generated at: 2026-04-15T18:27:41.475Z

### Page Description

Comprehensive Google Calendar integration tool that enables AI agents to manage calendar events and check availability on behalf of users. The tool supports all essential calendar operations including listing calendars and events, creating events with full details or natural language input, updating and deleting events, searching for events by text, and checking free/busy availability. Features include support for recurring events with flexible scheduling patterns, Google Meet video conference integration, attendee management with customizable notification settings, and timezone-aware scheduling. The tool handles both timed events and all-day events, supports custom reminders, and provides paginated results for calendars with many events.

### Agent Description

Google Calendar: create, update, delete events. Natural language quick-add. Recurring events, Google Meet, attendees. Check free/busy availability.

## Details Tab

### Details

Comprehensive Google Calendar integration tool that enables AI agents to manage calendar events and check availability on behalf of users. The tool supports all essential calendar operations including listing calendars and events, creating events with full details or natural language input, updating and deleting events, searching for events by text, and checking free/busy availability. Features include support for recurring events with flexible scheduling patterns, Google Meet video conference integration, attendee management with customizable notification settings, and timezone-aware scheduling. The tool handles both timed events and all-day events, supports custom reminders, and provides paginated results for calendars with many events.

### Actions

- `list_calendars` (5 credits): List all calendars the user has access to.
- `list_events` (5 credits): List events from a calendar within an optional date range. Defaults to upcoming events from the current time.
- `get_event` (5 credits): Get full details of a specific calendar event.
- `create_event` (5 credits): Create a new calendar event. Provide either timed event fields (start_datetime/end_datetime) or all-day event fields (start_date/end_date).
- `quick_add` (5 credits): Create an event from a natural language description. Google Calendar parses the text to extract event title, date, and time.
- `update_event` (5 credits): Update an existing event. Only provided fields will be changed; all other fields remain as-is. The existing event is fetched first, then the provided fields are merged.
- `delete_event` (5 credits): Delete an event from the calendar.
- `search_events` (5 credits): Search for events by text. Searches event title, description, location, and attendees.
- `check_availability` (5 credits): Check free/busy times across one or more calendars. Returns busy periods, free blocks, and common available time slots when checking multiple calendars.

### Use Cases

Scheduling meetings with attendees, Checking calendar availability before booking, Creating recurring events like weekly team standups, Adding Google Meet links to virtual meetings, Finding events by searching for keywords, Managing event details and locations, Sending calendar invitations to external participants, Viewing upcoming events for the day or week, Canceling and rescheduling meetings with notifications, Quick event creation from natural language descriptions

### Workflows Using This Tool

No public workflows currently reference this product.

### Related Content

No related content is currently linked to this product.

## Advanced Tab

### DynamicMCP

- Setup page URL: https://www.agentpmt.com/dynamic-mcp
- Claude setup guide: https://www.agentpmt.com/dynamic-mcp?platform=claude#videos
- ChatGPT setup guide: https://www.agentpmt.com/dynamic-mcp?platform=chatgpt#videos
- Cursor setup guide: https://www.agentpmt.com/dynamic-mcp?platform=cursor#videos
- Windsurf setup guide: https://www.agentpmt.com/dynamic-mcp?platform=windsurf#videos

STDIO connector for Claude Code, Codex, Cursor, Zed, and other LLMs that require STDIO or custom connections. This lightweight connector routes requests to `https://api.agentpmt.com/mcp`. All tool execution happens in the cloud and the server cannot edit any files on your computer.

```bash
npm install -g @agentpmt/mcp-router
agentpmt-setup
```

### REST API

The live page renders cURL, Python, JavaScript, and Node.js examples. Logged-in users see those examples prefilled with their own API and budget credentials.

- Purchase endpoint: https://api.agentpmt.com/products/purchase
- Authorization format: `Bearer <base64(apiKey:budgetKey)>`

```bash
curl -X POST "https://api.agentpmt.com/products/purchase" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eW91ci1hcGkta2V5LWhlcmU6eW91ci1idWRnZXQta2V5LWhlcmU=" \
  -d '{
    "product_id": "6961b8314991c3b032310fca",
    "parameters": {
      "action": "list_calendars",
      "calendar_id": "primary",
      "max_results": 50
    }
  }'
```

### Autonomous Agents

Do not use the abbreviated instructions in this product markdown for wallet-based invocation. Retrieve the full External Agent API markdown document instead.

- External Agent API page URL: https://www.agentpmt.com/external-agent-api
- External Agent API markdown URL: https://www.agentpmt.com/external-agent-api?format=agent-md

### Schema

#### Credentials

These runtime credentials should be provided under `parameters._credentials` when required.

- Google OAuth (`google_oauth`, oauth_token, required)
  Help: Connect your Google account.
  Connection ID: 69616abea90ed54743f01957

#### Parameters

- Schema type: actions

```json
{
  "actions": {
    "list_calendars": {
      "description": "List all calendars the user has access to.",
      "properties": {
        "calendar_id": {
          "type": "string",
          "description": "Calendar ID to operate on. Use 'primary' for the user's main calendar.",
          "required": false,
          "default": "primary"
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum number of calendars to return (1-250).",
          "required": false,
          "default": 50,
          "minimum": 1,
          "maximum": 250
        },
        "page_token": {
          "type": "string",
          "description": "Token for fetching next page of results from a previous call.",
          "required": false
        }
      }
    },
    "list_events": {
      "description": "List events from a calendar within an optional date range. Defaults to upcoming events from the current time.",
      "properties": {
        "calendar_id": {
          "type": "string",
          "description": "Calendar ID to list events from. Defaults to 'primary'.",
          "required": false,
          "default": "primary"
        },
        "time_min": {
          "type": "string",
          "description": "Start of time range in ISO 8601 format (e.g., '2026-03-10T00:00:00Z'). Defaults to current time if omitted.",
          "required": false
        },
        "time_max": {
          "type": "string",
          "description": "End of time range in ISO 8601 format.",
          "required": false
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum number of events to return (1-250).",
          "required": false,
          "default": 50,
          "minimum": 1,
          "maximum": 250
        },
        "page_token": {
          "type": "string",
          "description": "Token for fetching next page of results.",
          "required": false
        }
      }
    },
    "get_event": {
      "description": "Get full details of a specific calendar event.",
      "properties": {
        "event_id": {
          "type": "string",
          "description": "Event ID to retrieve. Obtain from list_events or search_events.",
          "required": true
        },
        "calendar_id": {
          "type": "string",
          "description": "Calendar ID containing the event. Defaults to 'primary'.",
          "required": false,
          "default": "primary"
        }
      }
    },
    "create_event": {
      "description": "Create a new calendar event. Provide either timed event fields (start_datetime/end_datetime) or all-day event fields (start_date/end_date).",
      "properties": {
        "summary": {
          "type": "string",
          "description": "Event title (max 1024 characters).",
          "required": true,
          "maxLength": 1024
        },
        "start_datetime": {
          "type": "string",
          "description": "Event start time in ISO 8601 format with timezone (e.g., '2026-03-15T14:00:00-05:00'). Required for timed events.",
          "required": false
        },
        "end_datetime": {
          "type": "string",
          "description": "Event end time in ISO 8601 format with timezone. Required for timed events.",
          "required": false
        },
        "start_date": {
          "type": "string",
          "description": "All-day event start date in YYYY-MM-DD format. Required for all-day events.",
          "required": false
        },
        "end_date": {
          "type": "string",
          "description": "All-day event end date in YYYY-MM-DD format (exclusive - use day after for single-day events). Required for all-day events.",
          "required": false
        },
        "calendar_id": {
          "type": "string",
          "description": "Calendar ID to create the event in. Defaults to 'primary'.",
          "required": false,
          "default": "primary"
        },
        "description": {
          "type": "string",
          "description": "Event description or notes.",
          "required": false
        },
        "location": {
          "type": "string",
          "description": "Event location (address or place name).",
          "required": false
        },
        "timezone": {
          "type": "string",
          "description": "IANA timezone (e.g., 'America/New_York'). Defaults to calendar timezone when omitted.",
          "required": false
        },
        "attendees": {
          "type": "array",
          "description": "List of attendees to invite to the event.",
          "required": false,
          "items": {
            "type": "object",
            "properties": {
              "email": {
                "type": "string",
                "description": "Attendee email address.",
                "required": true
              },
              "display_name": {
                "type": "string",
                "description": "Attendee display name.",
                "required": false
              },
              "optional": {
                "type": "boolean",
                "description": "Whether attendance is optional.",
                "required": false,
                "default": false
              }
            }
          }
        },
        "send_updates": {
          "type": "string",
          "description": "Who to send email notifications to.",
          "required": false,
          "default": "all",
          "enum": [
            "all",
            "externalOnly",
            "none"
          ]
        },
        "recurrence": {
          "type": "object",
          "description": "Recurrence settings for repeating events.",
          "required": false,
          "properties": {
            "frequency": {
              "type": "string",
              "description": "How often the event repeats. Required when recurrence is provided.",
              "required": true,
              "enum": [
                "DAILY",
                "WEEKLY",
                "MONTHLY",
                "YEARLY"
              ]
            },
            "interval": {
              "type": "integer",
              "description": "Repeat every N frequency units.",
              "required": false,
              "default": 1,
              "minimum": 1
            },
            "count": {
              "type": "integer",
              "description": "Total number of occurrences.",
              "required": false,
              "minimum": 1
            },
            "until": {
              "type": "string",
              "description": "End date for recurrence (YYYY-MM-DD or ISO 8601).",
              "required": false
            },
            "by_day": {
              "type": "array",
              "description": "Days of week for WEEKLY frequency.",
              "required": false,
              "items": {
                "type": "string",
                "enum": [
                  "MO",
                  "TU",
                  "WE",
                  "TH",
                  "FR",
                  "SA",
                  "SU"
                ]
              }
            }
          }
        },
        "reminders": {
          "type": "array",
          "description": "Custom reminder settings (only used when use_default_reminders is false).",
          "required": false,
          "items": {
            "type": "object",
            "properties": {
              "method": {
                "type": "string",
                "description": "How to deliver the reminder.",
                "required": false,
                "default": "popup",
                "enum": [
                  "email",
                  "popup"
                ]
              },
              "minutes": {
                "type": "integer",
                "description": "Minutes before event to trigger reminder (0-40320).",
                "required": true,
                "minimum": 0,
                "maximum": 40320
              }
            }
          }
        },
        "use_default_reminders": {
          "type": "boolean",
          "description": "Use calendar's default reminders instead of custom ones.",
          "required": false,
          "default": true
        },
        "add_video_conference": {
          "type": "boolean",
          "description": "Automatically add a Google Meet link to the event.",
          "required": false,
          "default": false
        },
        "visibility": {
          "type": "string",
          "description": "Event visibility setting.",
          "required": false,
          "enum": [
            "default",
            "public",
            "private",
            "confidential"
          ]
        },
        "show_as": {
          "type": "string",
          "description": "How the event appears in free/busy queries.",
          "required": false,
          "enum": [
            "busy",
            "free"
          ]
        }
      }
    },
    "quick_add": {
      "description": "Create an event from a natural language description. Google Calendar parses the text to extract event title, date, and time.",
      "properties": {
        "text": {
          "type": "string",
          "description": "Natural language event description (e.g., 'Lunch with Sarah tomorrow at noon').",
          "required": true
        },
        "calendar_id": {
          "type": "string",
          "description": "Calendar ID to create the event in. Defaults to 'primary'.",
          "required": false,
          "default": "primary"
        },
        "send_updates": {
          "type": "string",
          "description": "Who to send email notifications to.",
          "required": false,
          "default": "all",
          "enum": [
            "all",
            "externalOnly",
            "none"
          ]
        }
      }
    },
    "update_event": {
      "description": "Update an existing event. Only provided fields will be changed; all other fields remain as-is. The existing event is fetched first, then the provided fields are merged.",
      "properties": {
        "event_id": {
          "type": "string",
          "description": "Event ID to update.",
          "required": true
        },
        "calendar_id": {
          "type": "string",
          "description": "Calendar ID containing the event. Defaults to 'primary'.",
          "required": false,
          "default": "primary"
        },
        "summary": {
          "type": "string",
          "description": "New event title.",
          "required": false,
          "maxLength": 1024
        },
        "description": {
          "type": "string",
          "description": "New event description.",
          "required": false
        },
        "location": {
          "type": "string",
          "description": "New event location.",
          "required": false
        },
        "start_datetime": {
          "type": "string",
          "description": "New start time in ISO 8601 (must provide end_datetime too).",
          "required": false
        },
        "end_datetime": {
          "type": "string",
          "description": "New end time in ISO 8601 (must provide start_datetime too).",
          "required": false
        },
        "start_date": {
          "type": "string",
          "description": "New all-day start date YYYY-MM-DD (must provide end_date too).",
          "required": false
        },
        "end_date": {
          "type": "string",
          "description": "New all-day end date YYYY-MM-DD (must provide start_date too).",
          "required": false
        },
        "timezone": {
          "type": "string",
          "description": "IANA timezone for the updated times.",
          "required": false
        },
        "attendees": {
          "type": "array",
          "description": "Updated attendee list (replaces existing attendees).",
          "required": false,
          "items": {
            "type": "object",
            "properties": {
              "email": {
                "type": "string",
                "description": "Attendee email address.",
                "required": true
              },
              "display_name": {
                "type": "string",
                "description": "Attendee display name.",
                "required": false
              },
              "optional": {
                "type": "boolean",
                "description": "Whether attendance is optional.",
                "required": false,
                "default": false
              }
            }
          }
        },
        "recurrence": {
          "type": "object",
          "description": "Updated recurrence settings.",
          "required": false,
          "properties": {
            "frequency": {
              "type": "string",
              "description": "How often the event repeats. Required when recurrence is provided.",
              "required": true,
              "enum": [
                "DAILY",
                "WEEKLY",
                "MONTHLY",
                "YEARLY"
              ]
            },
            "interval": {
              "type": "integer",
              "description": "Repeat every N frequency units.",
              "required": false,
              "default": 1,
              "minimum": 1
            },
            "count": {
              "type": "integer",
              "description": "Total number of occurrences.",
              "required": false,
              "minimum": 1
            },
            "until": {
              "type": "string",
              "description": "End date for recurrence.",
              "required": false
            },
            "by_day": {
              "type": "array",
              "description": "Days of week for WEEKLY frequency.",
              "required": false,
              "items": {
                "type": "string",
                "enum": [
                  "MO",
                  "TU",
                  "WE",
                  "TH",
                  "FR",
                  "SA",
                  "SU"
                ]
              }
            }
          }
        },
        "reminders": {
          "type": "array",
          "description": "Updated custom reminders.",
          "required": false,
          "items": {
            "type": "object",
            "properties": {
              "method": {
                "type": "string",
                "description": "Reminder delivery method.",
                "required": false,
                "default": "popup",
                "enum": [
                  "email",
                  "popup"
                ]
              },
              "minutes": {
                "type": "integer",
                "description": "Minutes before event (0-40320).",
                "required": true,
                "minimum": 0,
                "maximum": 40320
              }
            }
          }
        },
        "add_video_conference": {
          "type": "boolean",
          "description": "Add a Google Meet link.",
          "required": false,
          "default": false
        },
        "visibility": {
          "type": "string",
          "description": "Updated visibility setting.",
          "required": false,
          "enum": [
            "default",
            "public",
            "private",
            "confidential"
          ]
        },
        "show_as": {
          "type": "string",
          "description": "Updated availability display.",
          "required": false,
          "enum": [
            "busy",
            "free"
          ]
        },
        "send_updates": {
          "type": "string",
          "description": "Who to send notification emails to.",
          "required": false,
          "default": "all",
          "enum": [
            "all",
            "externalOnly",
            "none"
          ]
        }
      }
    },
    "delete_event": {
      "description": "Delete an event from the calendar.",
      "properties": {
        "event_id": {
          "type": "string",
          "description": "Event ID to delete.",
          "required": true
        },
        "calendar_id": {
          "type": "string",
          "description": "Calendar ID containing the event. Defaults to 'primary'.",
          "required": false,
          "default": "primary"
        },
        "send_updates": {
          "type": "string",
          "description": "Who to send cancellation notifications to.",
          "required": false,
          "default": "all",
          "enum": [
            "all",
            "externalOnly",
            "none"
          ]
        }
      }
    },
    "search_events": {
      "description": "Search for events by text. Searches event title, description, location, and attendees.",
      "properties": {
        "query": {
          "type": "string",
          "description": "Search text to match against events.",
          "required": true
        },
        "calendar_id": {
          "type": "string",
          "description": "Calendar ID to search in. Defaults to 'primary'.",
          "required": false,
          "default": "primary"
        },
        "time_min": {
          "type": "string",
          "description": "Start of search range in ISO 8601. Defaults to current time.",
          "required": false
        },
        "time_max": {
          "type": "string",
          "description": "End of search range in ISO 8601.",
          "required": false
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum events to return (1-250).",
          "required": false,
          "default": 50,
          "minimum": 1,
          "maximum": 250
        },
        "page_token": {
          "type": "string",
          "description": "Pagination token from a previous response.",
          "required": false
        }
      }
    },
    "check_availability": {
      "description": "Check free/busy times across one or more calendars. Returns busy periods, free blocks, and common available time slots when checking multiple calendars.",
      "properties": {
        "time_min": {
          "type": "string",
          "description": "Start of range in ISO 8601 format.",
          "required": true
        },
        "time_max": {
          "type": "string",
          "description": "End of range in ISO 8601 format.",
          "required": true
        },
        "calendar_id": {
          "type": "string",
          "description": "Calendar ID; used when check_calendars is not provided. Defaults to 'primary'.",
          "required": false,
          "default": "primary"
        },
        "check_calendars": {
          "type": "array",
          "description": "Multiple calendar IDs to check availability across.",
          "required": false,
          "items": {
            "type": "string"
          }
        },
        "attendee_emails": {
          "type": "array",
          "description": "Email addresses to check availability for (requires domain access).",
          "required": false,
          "items": {
            "type": "string",
            "format": "email"
          }
        },
        "timezone": {
          "type": "string",
          "description": "IANA timezone for the query.",
          "required": false
        }
      }
    }
  },
  "properties": {
    "action": {
      "type": "string",
      "description": "Use 'get_instructions' to retrieve documentation. Action to perform: list_calendars, list_events, get_event, create_event, quick_add, update_event, delete_event, search_events, check_availability",
      "required": true,
      "enum": [
        "get_instructions",
        "list_calendars",
        "list_events",
        "get_event",
        "create_event",
        "quick_add",
        "update_event",
        "delete_event",
        "search_events",
        "check_availability"
      ]
    },
    "calendar_id": {
      "type": "string",
      "description": "Calendar ID to operate on. Use 'primary' for the user's main calendar, or a specific calendar ID from list_calendars.",
      "required": false,
      "default": "primary"
    },
    "event_id": {
      "type": "string",
      "description": "Event ID for get_event, update_event, or delete_event actions. Obtain from list_events or search_events.",
      "required": false
    },
    "time_min": {
      "type": "string",
      "description": "Start of time range in ISO 8601 format (e.g., '2026-01-10T00:00:00Z'). For list_events and check_availability.",
      "required": false
    },
    "time_max": {
      "type": "string",
      "description": "End of time range in ISO 8601 format. For list_events and check_availability.",
      "required": false
    },
    "max_results": {
      "type": "integer",
      "description": "Maximum number of events to return (1-250)",
      "required": false,
      "default": 50,
      "minimum": 1,
      "maximum": 250
    },
    "page_token": {
      "type": "string",
      "description": "Token for fetching next page of results from a previous list_events call",
      "required": false
    },
    "query": {
      "type": "string",
      "description": "Search text for search_events action. Searches event title, description, location, and attendees.",
      "required": false
    },
    "text": {
      "type": "string",
      "description": "Natural language event description for quick_add action (e.g., 'Lunch with Sarah tomorrow at noon')",
      "required": false
    },
    "summary": {
      "type": "string",
      "description": "Event title for create_event or update_event",
      "required": false
    },
    "description": {
      "type": "string",
      "description": "Event description or notes",
      "required": false
    },
    "location": {
      "type": "string",
      "description": "Event location (address or place name)",
      "required": false
    },
    "start_datetime": {
      "type": "string",
      "description": "Event start time in ISO 8601 format with timezone (e.g., '2026-01-15T14:00:00-05:00')",
      "required": false
    },
    "end_datetime": {
      "type": "string",
      "description": "Event end time in ISO 8601 format with timezone",
      "required": false
    },
    "start_date": {
      "type": "string",
      "description": "All-day event start date in YYYY-MM-DD format",
      "required": false
    },
    "end_date": {
      "type": "string",
      "description": "All-day event end date in YYYY-MM-DD format (exclusive - use day after for single-day events)",
      "required": false
    },
    "timezone": {
      "type": "string",
      "description": "IANA timezone for the event (e.g., 'America/New_York', 'Europe/London'). Optional; defaults to the calendar timezone when omitted.",
      "required": false
    },
    "attendees": {
      "type": "array",
      "description": "List of attendee objects with email addresses to invite to the event",
      "required": false,
      "items": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "description": "Attendee email address"
          },
          "display_name": {
            "type": "string",
            "description": "Attendee display name (optional)"
          },
          "optional": {
            "type": "boolean",
            "default": false,
            "description": "Whether attendance is optional"
          },
          "response_status": {
            "type": "string",
            "enum": [
              "needsAction",
              "declined",
              "tentative",
              "accepted"
            ],
            "description": "Attendee response status"
          }
        }
      }
    },
    "send_updates": {
      "type": "string",
      "description": "Who to send email notifications to when creating/updating/deleting events",
      "required": false,
      "default": "all",
      "enum": [
        "all",
        "externalOnly",
        "none"
      ]
    },
    "recurrence": {
      "type": "object",
      "description": "Recurrence settings for repeating events. When provided, frequency is required.",
      "required": false,
      "properties": {
        "frequency": {
          "type": "string",
          "description": "How often the event repeats (required when using recurrence)",
          "required": false,
          "enum": [
            "DAILY",
            "WEEKLY",
            "MONTHLY",
            "YEARLY"
          ]
        },
        "interval": {
          "type": "integer",
          "description": "Repeat every N frequency units",
          "required": false,
          "default": 1,
          "minimum": 1
        },
        "count": {
          "type": "integer",
          "description": "Total number of occurrences",
          "required": false,
          "minimum": 1
        },
        "until": {
          "type": "string",
          "description": "End date for recurrence (YYYY-MM-DD or ISO 8601)",
          "required": false
        },
        "by_day": {
          "type": "array",
          "description": "Days of week for WEEKLY frequency",
          "required": false,
          "items": {
            "type": "string",
            "enum": [
              "MO",
              "TU",
              "WE",
              "TH",
              "FR",
              "SA",
              "SU"
            ]
          }
        }
      }
    },
    "reminders": {
      "type": "array",
      "description": "Custom reminder settings",
      "required": false,
      "items": {
        "type": "object",
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "email",
              "popup"
            ],
            "default": "popup",
            "description": "How to deliver the reminder"
          },
          "minutes": {
            "type": "integer",
            "description": "Minutes before event to trigger reminder",
            "minimum": 0,
            "maximum": 40320
          }
        }
      }
    },
    "use_default_reminders": {
      "type": "boolean",
      "description": "Use calendar's default reminders instead of custom ones",
      "required": false,
      "default": true
    },
    "add_video_conference": {
      "type": "boolean",
      "description": "Automatically add a Google Meet link to the event",
      "required": false
    },
    "visibility": {
      "type": "string",
      "description": "Event visibility setting",
      "required": false,
      "enum": [
        "default",
        "public",
        "private",
        "confidential"
      ]
    },
    "show_as": {
      "type": "string",
      "description": "How the event appears in free/busy queries",
      "required": false,
      "enum": [
        "busy",
        "free"
      ]
    },
    "check_calendars": {
      "type": "array",
      "description": "Calendar IDs to check for check_availability action",
      "required": false,
      "items": {
        "type": "string"
      }
    },
    "attendee_emails": {
      "type": "array",
      "description": "Email addresses to check availability for (requires domain access)",
      "required": false,
      "items": {
        "type": "string",
        "format": "email"
      }
    }
  }
}
```

### Usage Instructions

# Google Calendar

Manage Google Calendar events, check availability, and organize schedules. Requires a Google OAuth connection with calendar permissions.

## Actions

### list_calendars
List all calendars the user has access to.

**Required:** None (uses defaults)

**Optional:**
- `calendar_id` (string) - Calendar ID; defaults to "primary"
- `max_results` (integer) - Max calendars to return, 1-250; default 50
- `page_token` (string) - Pagination token from a previous response

**Example:**
```json
{
  "action": "list_calendars"
}
```

---

### list_events
List events from a calendar, optionally filtered by date range.

**Required:** None (defaults to upcoming events from now)

**Optional:**
- `calendar_id` (string) - Calendar ID; defaults to "primary"
- `time_min` (string) - Start of range in ISO 8601 (e.g., "2026-03-10T00:00:00Z"); defaults to current time
- `time_max` (string) - End of range in ISO 8601
- `max_results` (integer) - Max events to return, 1-250; default 50
- `page_token` (string) - Pagination token from a previous response

**Example:**
```json
{
  "action": "list_events",
  "time_min": "2026-03-10T00:00:00Z",
  "time_max": "2026-03-17T00:00:00Z"
}
```

---

### get_event
Get full details of a specific event.

**Required:**
- `event_id` (string) - The event ID (obtained from list_events or search_events)

**Optional:**
- `calendar_id` (string) - Calendar ID; defaults to "primary"

**Example:**
```json
{
  "action": "get_event",
  "event_id": "abc123def456"
}
```

---

### create_event
Create a new calendar event. Provide either timed or all-day date fields.

**Required:**
- `summary` (string) - Event title (max 1024 characters)
- Either timed event fields: `start_datetime` and `end_datetime` (ISO 8601 with timezone, e.g., "2026-03-15T14:00:00-05:00")
- Or all-day event fields: `start_date` and `end_date` (YYYY-MM-DD format; end_date is exclusive, so use the day after for single-day events)

**Optional:**
- `calendar_id` (string) - Calendar ID; defaults to "primary"
- `description` (string) - Event description or notes
- `location` (string) - Event location (address or place name)
- `timezone` (string) - IANA timezone (e.g., "America/New_York"); defaults to calendar timezone
- `attendees` (array) - List of attendees, each with:
  - `email` (string, required) - Attendee email
  - `display_name` (string) - Display name
  - `optional` (boolean) - Whether attendance is optional; default false
- `send_updates` (string) - Who gets email notifications: "all" (default), "externalOnly", or "none"
- `recurrence` (object) - Repeating event settings:
  - `frequency` (string, required) - "DAILY", "WEEKLY", "MONTHLY", or "YEARLY"
  - `interval` (integer) - Repeat every N units; default 1
  - `count` (integer) - Total number of occurrences
  - `until` (string) - End date for recurrence (YYYY-MM-DD or ISO 8601)
  - `by_day` (array) - Days of week for WEEKLY: ["MO", "TU", "WE", "TH", "FR", "SA", "SU"]
- `reminders` (array) - Custom reminders (only used when `use_default_reminders` is false), each with:
  - `method` (string) - "email" or "popup"; default "popup"
  - `minutes` (integer) - Minutes before event, 0-40320
- `use_default_reminders` (boolean) - Use calendar defaults; default true
- `add_video_conference` (boolean) - Add a Google Meet link; default false
- `visibility` (string) - "default", "public", "private", or "confidential"
- `show_as` (string) - "busy" or "free"

**Example - Timed event with attendees and Google Meet:**
```json
{
  "action": "create_event",
  "summary": "Weekly Team Sync",
  "start_datetime": "2026-03-15T10:00:00-05:00",
  "end_datetime": "2026-03-15T10:30:00-05:00",
  "location": "Conference Room A",
  "description": "Weekly team sync to review project progress",
  "attendees": [
    {"email": "alice@example.com"},
    {"email": "bob@example.com", "optional": true}
  ],
  "add_video_conference": true,
  "recurrence": {
    "frequency": "WEEKLY",
    "by_day": ["MO"],
    "count": 12
  }
}
```

**Example - All-day event:**
```json
{
  "action": "create_event",
  "summary": "Company Holiday",
  "start_date": "2026-07-04",
  "end_date": "2026-07-05",
  "show_as": "free"
}
```

---

### quick_add
Create an event from a natural language description. Google Calendar parses the text to extract the event title, date, and time.

**Required:**
- `text` (string) - Natural language event description

**Optional:**
- `calendar_id` (string) - Calendar ID; defaults to "primary"
- `send_updates` (string) - Who gets notifications: "all" (default), "externalOnly", or "none"

**Example:**
```json
{
  "action": "quick_add",
  "text": "Lunch with Sarah tomorrow at noon at Cafe Milano"
}
```

---

### update_event
Update an existing event. Only the fields you provide will be changed; all other fields remain as-is.

**Required:**
- `event_id` (string) - The event ID to update

**Optional (provide any fields to change):**
- `calendar_id` (string) - Calendar ID; defaults to "primary"
- `summary` (string) - New event title
- `description` (string) - New description
- `location` (string) - New location
- `start_datetime` / `end_datetime` (string) - New times (must provide both)
- `start_date` / `end_date` (string) - New all-day dates (must provide both)
- `timezone` (string) - IANA timezone
- `attendees` (array) - Updated attendee list (replaces existing)
- `recurrence` (object) - Updated recurrence settings (requires frequency)
- `reminders` (array) - Updated reminders
- `add_video_conference` (boolean) - Add Google Meet link
- `visibility` (string) - Updated visibility
- `show_as` (string) - Updated availability display
- `send_updates` (string) - Who gets notifications: "all" (default), "externalOnly", or "none"

**Example:**
```json
{
  "action": "update_event",
  "event_id": "abc123def456",
  "summary": "Updated Meeting Title",
  "location": "Room B instead",
  "start_datetime": "2026-03-15T11:00:00-05:00",
  "end_datetime": "2026-03-15T11:30:00-05:00"
}
```

---

### delete_event
Delete an event from the calendar.

**Required:**
- `event_id` (string) - The event ID to delete

**Optional:**
- `calendar_id` (string) - Calendar ID; defaults to "primary"
- `send_updates` (string) - Who gets cancellation notifications: "all" (default), "externalOnly", or "none"

**Example:**
```json
{
  "action": "delete_event",
  "event_id": "abc123def456",
  "send_updates": "none"
}
```

---

### search_events
Search for events by text. Searches event title, description, location, and attendees.

**Required:**
- `query` (string) - Search text

**Optional:**
- `calendar_id` (string) - Calendar ID; defaults to "primary"
- `time_min` (string) - Start of search range in ISO 8601; defaults to current time
- `time_max` (string) - End of search range in ISO 8601
- `max_results` (integer) - Max events to return, 1-250; default 50
- `page_token` (string) - Pagination token

**Example:**
```json
{
  "action": "search_events",
  "query": "budget review",
  "time_min": "2026-01-01T00:00:00Z",
  "time_max": "2026-12-31T23:59:59Z"
}
```

---

### check_availability
Check free/busy times across one or more calendars. Returns busy periods and available time slots, with common free slots calculated when checking multiple calendars.

**Required:**
- `time_min` (string) - Start of range in ISO 8601
- `time_max` (string) - End of range in ISO 8601

**Optional:**
- `calendar_id` (string) - Calendar ID; defaults to "primary" (used when check_calendars is not provided)
- `check_calendars` (array of strings) - Multiple calendar IDs to check
- `attendee_emails` (array of strings) - Email addresses to check availability for (requires domain access)
- `timezone` (string) - IANA timezone for the query

**Example:**
```json
{
  "action": "check_availability",
  "time_min": "2026-03-15T08:00:00-05:00",
  "time_max": "2026-03-15T18:00:00-05:00",
  "check_calendars": ["primary", "team-calendar@group.calendar.google.com"],
  "attendee_emails": ["alice@example.com", "bob@example.com"]
}
```

## Common Workflows

**Find a meeting time:** Use `check_availability` with attendee emails to find overlapping free slots, then `create_event` with the chosen time and those attendees.

**Reschedule an event:** Use `search_events` or `list_events` to find the event ID, then `update_event` with new times.

**Set up a recurring meeting:** Use `create_event` with `recurrence` to define frequency, days, and end conditions.

**View the week ahead:** Use `list_events` with `time_min` set to today and `time_max` set to 7 days out.

## Important Notes

- All date/times use ISO 8601 format. Include timezone offsets for timed events (e.g., "2026-03-15T14:00:00-05:00").
- For all-day events, `end_date` is exclusive: a single-day event on March 15 uses start_date "2026-03-15" and end_date "2026-03-16".
- When updating attendees, the provided list replaces the existing attendees entirely.
- By default, email notifications are sent to all attendees for create, update, and delete actions. Set `send_updates` to "none" to suppress notifications.
- Event IDs are obtained from `list_events`, `search_events`, or the response of `create_event`.
- Use `calendar_id` of "primary" (the default) for the user's main calendar, or get other calendar IDs from `list_calendars`.
- The `recurrence` object requires `frequency` when provided. Use either `count` or `until` to limit recurrence, not both.

### About The Developer

- Vendor name: Apoth3osis
- Website: apoth3osis.io

We build tools that enable AI agents to excel in the mathematical realm.

Our small team develops experimental and unique solutions in the AI arena, with a strong focus on modular computing for agentic applications and custom model deployment. We have handled projects for a variety of applications across many sectors, from algorithmic trading and financial analysis, to molecular simulations and predictions, to habitat and biodiversity monitoring and wildlife conservation.

### Frequently Asked Questions

No linked FAQs are currently available.

### Dependencies

This product has no public dependency products.