google-calendar
About This Skill
Interact with Google Calendar via the Google Calendar API – list upcoming events, create new events, update or delete them. Use this skill when you need programmatic access to your calendar from Open…
Use Cases
Documentation (Original)
Source: SKILL.mdname: google-calendar
description: Interact with Google Calendar via the Google Calendar API – list upcoming events, create new events, update or delete them. Use this skill when you need programmatic access to your calendar from OpenClaw.
Google Calendar Skill
Overview
This skill provides a thin wrapper around the Google Calendar REST API. It lets you:
- list upcoming events (optionally filtered by time range or query)
- add a new event with title, start/end time, description, location, and attendees
- update an existing event by its ID
- delete an event by its ID
The skill is implemented in Python (scripts/google_calendar.py). It expects the following environment variables to be set (you can store them securely with openclaw secret set):
GOOGLE_CLIENT_ID=…
GOOGLE_CLIENT_SECRET=…
GOOGLE_REFRESH_TOKEN=… # obtained after OAuth consent
GOOGLE_CALENDAR_ID=primary # or the ID of a specific calendar
The first time you run the skill you may need to perform an OAuth flow to obtain a refresh token – see the Setup section below.
Commands
google-calendar list [--from <ISO> --to <ISO> --max <N>]
google-calendar add --title <title> [--start <ISO> --end <ISO>]
[--desc <description> --location <loc> --attendees <email1,email2>]
google-calendar update --event-id <id> [--title <title> ... other fields]
google-calendar delete --event-id <id>
All commands return a JSON payload printed to stdout. Errors are printed to stderr and cause a non‑zero exit code.
Setup
- Create a Google Cloud project and enable the Google Calendar API.
- Create OAuth credentials (type Desktop app). Note the
client_idandclient_secret. - Run the helper script to obtain a refresh token:
It will open a browser (or print a URL you can open elsewhere) and ask you to grant access. After you approve, copy theGOOGLE_CLIENT_ID=… GOOGLE_CLIENT_SECRET=… python3 -m google_calendar.authrefresh_tokenit prints. - Store the credentials securely:
openclaw secret set GOOGLE_CLIENT_ID <value> openclaw secret set GOOGLE_CLIENT_SECRET <value> openclaw secret set GOOGLE_REFRESH_TOKEN <value> openclaw secret set GOOGLE_CALENDAR_ID primary # optional - Install the required Python packages (once):
pip install --user google-auth google-auth-oauthlib google-api-python-client
How it works (brief)
The script loads the credentials from the environment, refreshes the access token using the refresh token, builds a service = build('calendar', 'v3', credentials=creds), and then calls the appropriate API method.
References
- Google Calendar API reference: https://developers.google.com/calendar/api/v3/reference
- OAuth 2.0 for installed apps: https://developers.google.com/identity/protocols/oauth2/native-app
Note: This skill does not require a GUI; it works entirely via HTTP calls, so it is suitable for headless servers.
Security Audit
Summary
Interact with Google Calendar via the Google Calendar API – list upcoming events, create new events, update or delete them. Use this skill when you need programmatic access to your calendar from OpenClaw.
ToxicSkills Analysis
Toxic Flags
No Toxic signals detected by current static checks.
Key Risks 0 items
Deterministic Findings (Evidence)
| Rule | Severity | File | Snippet |
|---|---|---|---|
| NET_HTTP_REQUEST | medium | skills/AdrianMiller99/google-calendar/scripts/google_calendar.py Line 2 | import os, sys, json, urllib.request, urllib.parse, argparse |
| NET_HTTP_REQUEST | medium | skills/AdrianMiller99/google-calendar/scripts/google_calendar.py Line 23 | req = urllib.request.Request(url, data=data, method=method) |
| NET_HTTP_REQUEST | medium | skills/AdrianMiller99/google-calendar/scripts/google_calendar.py Line 29 | with urllib.request.urlopen(req) as resp: |
| NET_HTTP_REQUEST | medium | skills/AdrianMiller99/google-calendar/scripts/refresh_token.py Line 2 | import os, sys, json, urllib.request, urllib.parse |
| NET_HTTP_REQUEST | medium | skills/AdrianMiller99/google-calendar/scripts/refresh_token.py Line 17 | req = urllib.request.Request('https://oauth2.googleapis.com/token', data=data, method='POST') |
| NET_HTTP_REQUEST | medium | skills/AdrianMiller99/google-calendar/scripts/refresh_token.py Line 20 | with urllib.request.urlopen(req) as resp: |
Scoring Criteria
Each skill is scored across 5 dimensions. The weighted total determines the star rating.
Star Rating Scale
Why This Score?
The following dimensions scored below 60, dragging the overall rating down:
- Privacy Risk: 28/100