{"skill":{"slug":"google-calendar-scheduling","displayName":"Google Calendar Scheduler","summary":"Check Google Calendar calendars, find free time, schedule meetings, and update events via the Google Calendar API. Use this skill when users want help schedu...","description":"---\nname: google-calendar-scheduler\ndescription: Check Google Calendar calendars, find free time, schedule meetings, and update events via the Google Calendar API. Use this skill when users want help scheduling or updating meetings — list calendars, show event details for a day or range, find free time slots, search for events, create events from structured details, adjust or delete existing events after confirmation, and check current date/time for timezone-aware scheduling.\n---\n\n# Google Calendar Scheduler\n\n![Google Calendar Scheduler](https://raw.githubusercontent.com/ClawLink-HQ/clawlink/main/public/images/brand-logos/google-calendar.svg)\n\nAccess Google Calendar via the Google Calendar API with OAuth authentication. Check calendars, find free time, schedule meetings, and update events.\n\nThis skill uses [ClawLink](https://claw-link.dev/?utm_source=clawhub&utm_medium=referral&utm_content=google-calendar-scheduling) for hosted connection flows and credentials so you do not need to configure Google Calendar API access yourself.\n\n### Setup in 3 Steps\n\n| Step 1: Install | Step 2: Pair Account | Step 3: Connect Google Calendar |\n|:---:|:---:|:---:|\n| ![Install](https://raw.githubusercontent.com/ClawLink-HQ/clawlink/main/public/images/pairing/initialstep_1.gif) | ![Pair](https://raw.githubusercontent.com/ClawLink-HQ/clawlink/main/public/images/approve_process.gif) | *App-specific connection GIF coming soon* |\n| Run the install command in OpenClaw | Sign in and approve the device | Open the dashboard and connect Google Calendar |\n\n## How It Works\n\n```\n┌─────────────────┐     ┌──────────────┐     ┌──────────────────┐\n│   OpenClaw      │────▶│   ClawLink   │────▶│ Google Calendar  │\n│   (User Chat)   │     │   (OAuth)    │     │   API (REST)     │\n└─────────────────┘     └──────────────┘     └──────────────────┘\n         │                       │                       │\n         │  1. Install Plugin    │                       │\n         │  2. Pair Device       │                       │\n         │  3. Connect Google Calendar                    │\n         │                       │  4. Secure Token      │\n         │                       │  5. Proxy Requests    │\n         │                       │                       │\n         ▼                       ▼                       ▼\n   ┌──────────┐           ┌──────────┐           ┌──────────┐\n   │  SKILL   │           │ Dashboard│           │ Calendar │\n   │  File    │           │ Auth     │           │ Events   │\n   └──────────┘           └──────────┘           └──────────┘\n```\n\n## Install\n\nInstall the verified ClawLink plugin from ClawHub. After the user confirms, complete the full setup so ClawLink tools are visible in the next OpenClaw chat.\n\n```bash\nopenclaw plugins install clawhub:clawlink-plugin\nopenclaw config set tools.alsoAllow '[\"clawlink-plugin\"]' --strict-json\nopenclaw gateway restart\n```\n\nThen tell the user: \"OpenClaw has been restarted. Send `/new` as a standalone message to start a fresh chat, then ask for Google Calendar again.\"\n\n## Quick Start\n\n```bash\n# List calendars\nclawlink_call_tool --tool \"googlecalendar_list_calendars\" --params '{}'\n\n# Get current date/time for timezone-aware scheduling\nclawlink_call_tool --tool \"googlecalendar_get_current_date_time\" --params '{\"timezone\": \"America/New_York\"}'\n\n# List events for a specific day\nclawlink_call_tool --tool \"googlecalendar_events_list\" --params '{\"calendar_id\": \"primary\", \"time_min\": \"2025-01-15T00:00:00Z\", \"time_max\": \"2025-01-16T00:00:00Z\"}'\n\n# Find free time slots\nclawlink_call_tool --tool \"googlecalendar_find_free_slots\" --params '{\"time_min\": \"2025-01-15T09:00:00Z\", \"time_max\": \"2025-01-15T18:00:00Z\", \"calendar_ids\": [\"primary\"], \"meeting_duration_minutes\": 60}'\n```\n\n## Authentication\n\nAll Google Calendar tool calls are authenticated automatically by ClawLink using the user's connected Google account.\n\n**No API key is required in chat.** ClawLink stores the OAuth token securely and injects it into every Google Calendar API request on the user's behalf.\n\n### Getting Connected\n\n1. Install the ClawLink plugin (see Install above).\n2. Pair the plugin with `clawlink_begin_pairing` if it is not configured yet.\n3. Open https://claw-link.dev/dashboard?add=google-calendar and connect Google Calendar.\n4. Call `clawlink_list_integrations` to verify the connection is active.\n\n## Connection Management\n\n### List Connections\n\n```bash\nclawlink_list_integrations\n```\n\n**Response:** Returns all connected integrations. Look for `google-calendar` in the list.\n\n### Verify Connection\n\n```bash\nclawlink_list_tools --integration google-calendar\n```\n\n**Response:** Returns the live tool catalog for Google Calendar.\n\n### Reconnect\n\nIf Google Calendar tools are missing or the connection shows an error:\n\n1. Direct the user to https://claw-link.dev/dashboard?add=google-calendar\n2. After they confirm, call `clawlink_list_integrations` to verify\n3. Then call `clawlink_list_tools --integration google-calendar`\n\n## Security & Permissions\n\n- Access is scoped to calendars accessible to the connected Google account.\n- **All write operations require explicit user confirmation.** Before executing any event create, update, move, or delete, confirm the intended effect with the user.\n- Destructive actions (deleting events, clearing calendars) are marked as high-impact and must be confirmed.\n- Moves and deletions of events with attendees affect other people's calendars — treat these as especially sensitive.\n\n## Tool Reference\n\n### Calendars\n\n| Tool | Description | Mode |\n|------|-------------|------|\n| `googlecalendar_list_calendars` | List all calendars in the user's calendar list | Read |\n| `googlecalendar_get_calendar` | Get a specific calendar's metadata | Read |\n| `googlecalendar_duplicate_calendar` | Create a new empty calendar | Write |\n| `googlecalendar_patch_calendar` | Update calendar title, description, timezone | Write |\n| `googlecalendar_calendars_delete` | Delete a secondary calendar | Write |\n| `googlecalendar_clear_calendar` | Delete all events from a calendar | Write |\n\n### Events\n\n| Tool | Description | Mode |\n|------|-------------|------|\n| `googlecalendar_events_list` | List events on a calendar with time filtering | Read |\n| `googlecalendar_events_list_all_calendars` | List events across all calendars | Read |\n| `googlecalendar_events_get` | Get a specific event by ID | Read |\n| `googlecalendar_find_event` | Search events by text query and time range | Read |\n| `googlecalendar_create_event` | Create a new calendar event | Write |\n| `googlecalendar_update_event` | Full update of an existing event | Write |\n| `googlecalendar_patch_event` | Partial update of event fields | Write |\n| `googlecalendar_delete_event` | Delete an event by ID | Write |\n| `googlecalendar_events_move` | Move an event to another calendar | Write |\n| `googlecalendar_events_instances` | Get instances of a recurring event | Read |\n\n### Scheduling\n\n| Tool | Description | Mode |\n|------|-------------|------|\n| `googlecalendar_find_free_slots` | Find free/busy time slots across calendars | Read |\n| `googlecalendar_get_current_date_time` | Get current date and time in a timezone | Read |\n| `googlecalendar_quick_add` | Parse natural language to create a simple event | Write |\n\n### Attendees\n\n| Tool | Description | Mode |\n|------|-------------|------|\n| `googlecalendar_remove_attendee` | Remove an attendee from an event | Write |\n\n### Availability\n\n| Tool | Description | Mode |\n|------|-------------|------|\n| `googlecalendar_freebusy_query` | Get free/busy info for a list of calendars | Read |\n\n### Access Control\n\n| Tool | Description | Mode |\n|------|-------------|------|\n| `googlecalendar_acl_list` | List access control rules for a calendar | Read |\n| `googlecalendar_acl_insert` | Create an ACL rule (share calendar) | Write |\n| `googlecalendar_acl_delete` | Delete an ACL rule | Write |\n\n## Code Examples\n\n### List today's events\n\n```bash\nclawlink_call_tool --tool \"googlecalendar_events_list\" \\\n  --params '{\n    \"calendar_id\": \"primary\",\n    \"time_min\": \"2025-01-15T00:00:00-05:00\",\n    \"time_max\": \"2025-01-15T23:59:59-05:00\",\n    \"single_events\": true,\n    \"order_by\": \"startTime\"\n  }'\n```\n\n### Find free time for a meeting\n\n```bash\nclawlink_call_tool --tool \"googlecalendar_find_free_slots\" \\\n  --params '{\n    \"time_min\": \"2025-01-15T09:00:00-05:00\",\n    \"time_max\": \"2025-01-15T17:00:00-05:00\",\n    \"calendar_ids\": [\"primary\"],\n    \"meeting_duration_minutes\": 60\n  }'\n```\n\n### Create a meeting event\n\n```bash\nclawlink_call_tool --tool \"googlecalendar_create_event\" \\\n  --params '{\n    \"calendar_id\": \"primary\",\n    \"summary\": \"Team Sync\",\n    \"description\": \"Weekly team synchronization meeting\",\n    \"start_datetime\": \"2025-01-15T10:00:00\",\n    \"event_duration_minutes\": 60,\n    \"timezone\": \"America/New_York\",\n    \"attendees\": [\"colleague@example.com\"]\n  }'\n```\n\n### Update an event\n\n```bash\nclawlink_call_tool --tool \"googlecalendar_patch_event\" \\\n  --params '{\n    \"calendar_id\": \"primary\",\n    \"event_id\": \"abc123xyz\",\n    \"summary\": \"Updated Team Sync\",\n    \"start_datetime\": \"2025-01-15T11:00:00\",\n    \"event_duration_minutes\": 90\n  }'\n```\n\n## Discovery Workflow\n\n1. Call `clawlink_list_integrations` to confirm Google Calendar is connected.\n2. Call `clawlink_list_tools --integration google-calendar` to see the live catalog.\n3. Treat the returned list as the source of truth. Do not guess or assume what tools exist.\n4. If the user describes a capability but the exact tool is unclear, call `clawlink_search_tools` with a short query and integration `google-calendar`.\n5. If no Google Calendar tools appear, direct the user to https://claw-link.dev/dashboard?add=google-calendar.\n\n## Execution Workflow\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│  READ OPERATIONS (Safe)                                     │\n│  list → get → find → search → describe → call               │\n│                                                             │\n│  Example: List calendars → Find free slots → Show options   │\n└─────────────────────────────────────────────────────────────┘\n                              │\n                              ▼\n┌─────────────────────────────────────────────────────────────┐\n│  WRITE OPERATIONS (Require Confirmation)                    │\n│  list → get → describe → preview → confirm → call           │\n│                                                             │\n│  Example: Preview event creation → User confirms            │\n│           → Execute create                                   │\n└─────────────────────────────────────────────────────────────┘\n```\n\n1. For unfamiliar tools, ambiguous requests, or any write action, call `clawlink_describe_tool` first.\n2. Use the returned guidance, schema, `whenToUse`, `askBefore`, `safeDefaults`, `examples`, and `followups` to shape the call.\n3. Prefer read, list, search, and availability operations before writes.\n4. For event changes or other high-impact actions, call `clawlink_preview_tool` first, then confirm with the user.\n5. Execute with `clawlink_call_tool`. Pass confirmation only after the preview matches the user's intent.\n6. If the tool call fails, report the real error. Do not invent results or restate the failure as a missing capability unless the live catalog supports that conclusion.\n\n## Notes\n\n- Timezone-aware scheduling: Always use IANA timezone identifiers (e.g., `America/New_York`, `Europe/London`) not abbreviations.\n- UTC timestamps ending in `Z` are interpreted in UTC regardless of calendar timezone — use timezone-offset timestamps for local date queries.\n- Primary calendar is referenced as `calendar_id: \"primary\"`.\n- Events with attendees automatically send invitations via Google Calendar.\n- Deleting or moving events with attendees affects their calendars too — always confirm.\n- No conflict checking is performed before event creation — use `find_free_slots` to detect overlaps.\n\n## Error Handling\n\n| Status / Error | Meaning |\n|----------------|---------|\n| Tool not found | The tool name does not exist in the current catalog. Verify with `clawlink_list_tools --integration google-calendar`. |\n| Missing connection | Google Calendar is not connected. Direct the user to https://claw-link.dev/dashboard?add=google-calendar. |\n| `404 Not Found` | Calendar or event does not exist. Verify the calendar_id and event_id. |\n| `403 Forbidden` | Insufficient permissions to access or modify the calendar. |\n| `400 Bad Request` | Invalid datetime format or timezone. Use ISO 8601 with timezone offset. |\n| Write rejected | User did not confirm a write action. Always confirm before executing event creates, updates, moves, or deletes. |\n\n### Troubleshooting: Tools Not Visible\n\n1. Check that the ClawLink plugin is installed:\n   ```bash\n   openclaw plugins list\n   ```\n2. If the plugin is installed but tools are missing, tell the user to send `/new` as a standalone message to reload the catalog.\n3. If a fresh chat does not help, run:\n   ```bash\n   openclaw config set tools.alsoAllow '[\"clawlink-plugin\"]' --strict-json\n   openclaw gateway restart\n   ```\n4. After restart, tell the user to send `/new` again and retry.\n\n### Troubleshooting: Invalid Tool Call\n\n1. Ensure the integration slug is exactly `google-calendar`.\n2. Use `clawlink_describe_tool` to verify parameter names and types before calling.\n3. For write operations, always call `clawlink_preview_tool` first.\n\n## Resources\n\n- [Google Calendar API Overview](https://developers.google.com/workspace/calendar/api/guides/overview)\n- [Google Calendar API Reference](https://developers.google.com/workspace/calendar/api/reference/rest)\n- [Event Resource](https://developers.google.com/workspace/calendar/api/reference/rest/v3/events)\n- [ClawLink](https://claw-link.dev/?utm_source=clawhub&utm_medium=referral&utm_content=google-calendar-scheduling)\n- [ClawLink Docs](https://docs.claw-link.dev/openclaw)\n- [ClawLink Verification](https://claw-link.dev/verify)\n\n## Related Skills\n\n- [Gmail](https://clawhub.ai/hith3sh/gmail-email) — For email management alongside scheduling\n- [Google Meet](https://clawhub.ai/hith3sh/google-meet) — For video conferencing\n\n---\n\n**Powered by [ClawLink](https://claw-link.dev/?utm_source=clawhub&utm_medium=referral&utm_content=google-calendar-scheduling)** — an integration hub for OpenClaw\n\n![ClawLink Logo](https://raw.githubusercontent.com/ClawLink-HQ/clawlink/main/public/images/logo/link_logo_black_small.png)","tags":{"latest":"1.0.6"},"stats":{"comments":0,"downloads":1761,"installsAllTime":1,"installsCurrent":1,"stars":7,"versions":7},"createdAt":1777815160551,"updatedAt":1780988958722},"latestVersion":{"version":"1.0.6","createdAt":1780988958722,"changelog":"Add UTM attribution tags (utm_source=clawhub) to ClawLink branding links so visits from this skill page are tracked as a distinct traffic source.","license":"MIT-0"},"metadata":null,"owner":{"handle":"hith3sh","userId":"s173vws87a7ss71xf9rq53k5gd8568kv","displayName":"Jay","image":"https://avatars.githubusercontent.com/u/83839061?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780991815942}}