Install
openclaw skills install caldav-syncCalendar and task management via CalDAV protocol. Query, create, edit, and delete calendar events and todos. Free/busy query, multi-account support.
openclaw skills install caldav-syncManage calendar events and todos via CalDAV protocol. Supports Google Calendar, iCloud, Nextcloud, Fastmail, NetEase (163/126/yeah.net), and any standard CalDAV server.
Run the setup script to install dependencies and configure your CalDAV account:
bash setup.sh
If running commands manually without setup.sh, install dependencies first:
npm install --production
Configuration is stored at ~/.config/mail-skills/.env (shared with imap-smtp-email skill). If no shared config is found, the skill falls back to a .env file in the skill directory.
# Default account
PROVIDER=163
USERNAME=your@163.com
PASSWORD=your_password
CALDAV_DEFAULT_CALENDAR=
The PROVIDER preset auto-fills the CalDAV server URL. For custom servers:
PROVIDER=custom
USERNAME=your@email.com
PASSWORD=your_password
CALDAV_SERVER_URL=https://your-caldav-server.com/
You can configure additional accounts in the same config file. Each account uses a name prefix (uppercase) on all variables.
# Work account (WORK_ prefix)
WORK_PROVIDER=gmail
WORK_USERNAME=me@company.com
WORK_PASSWORD=app_password
WORK_CALDAV_DEFAULT_CALENDAR=work
Add --account <name> before the command:
node scripts/caldav.js --account work list-calendars
node scripts/caldav.js --account work list-events --start 2026-01-01 --end 2026-12-31
| Provider | Server URL | Auth |
|---|---|---|
| Google Calendar | https://calendar.google.com/calendar/dav/ | App Password |
| iCloud | https://caldav.icloud.com/ | App-Specific Password |
| Nextcloud | https://<host>/remote.php/dav/calendars/<user>/ | Username/Password |
| Fastmail | https://caldav.fastmail.com/dav/ | Username/Password |
| NetEase (163/126/yeah.net) | https://caldav.163.com/ | Authorization Code |
| NetEase Enterprise (North) | https://caldav.qiye.163.com/ | Username/Password |
| NetEase Enterprise (East) | https://caldavhz.qiye.163.com/ | Username/Password |
List all available calendars.
node scripts/caldav.js [--account <name>] list-calendars
Query events in a time range.
node scripts/caldav.js [--account <name>] list-events --start <date> --end <date> [--calendar <id>]
Get a specific event by UID.
node scripts/caldav.js [--account <name>] get-event --uid <uid> [--calendar <id>]
Create a new calendar event.
node scripts/caldav.js [--account <name>] create-event --summary <text> --start <datetime> --end <datetime> \
[--description <text>] [--location <text>] [--calendar <id>]
Update an existing event.
node scripts/caldav.js [--account <name>] update-event --uid <uid> [--summary <text>] [--start <datetime>] \
[--end <datetime>] [--description <text>] [--location <text>] [--calendar <id>]
Delete an event.
node scripts/caldav.js [--account <name>] delete-event --uid <uid> [--calendar <id>]
List all todos/tasks.
node scripts/caldav.js [--account <name>] list-todos [--status <all|pending|completed>] [--calendar <id>]
Create a new todo/task.
node scripts/caldav.js [--account <name>] create-todo --summary <text> [--due <date>] \
[--description <text>] [--priority <1-9>] [--calendar <id>]
Update an existing todo.
node scripts/caldav.js [--account <name>] update-todo --uid <uid> [--summary <text>] [--due <date>] \
[--status <pending|completed>] [--calendar <id>]
Delete a todo.
node scripts/caldav.js [--account <name>] delete-todo --uid <uid> [--calendar <id>]
Query free/busy information for a time range.
node scripts/caldav.js [--account <name>] freebusy --start <datetime> --end <datetime> [--calendar <id>]
List all configured CalDAV accounts.
node scripts/caldav.js list-accounts
~/.config/mail-skills/.env with 600 permissions (owner read/write only)Connection failed:
Authentication failed:
No calendars found:
npx skills add https://github.com/gzlicanyi/mail-skills -s imap-smtp-email
Issues and pull requests are welcome at github.com/gzlicanyi/mail-skills.