Skill: gzlicanyi/caldav-sync (version 1.0.3)

--- name: caldav-sync description: Calendar and task management via CalDAV protocol. Query, create, edit, and delete calendar events and todos. Free/busy query, multi-account support. metadata: openclaw: emoji: "📅" requires: bins: - node - npm env: - PROVIDER - USERNAME - PASSWORD primaryEnv: PROVIDER --- # CalDAV Sync Tool Manage calendar events and todos via CalDAV protocol. Supports Google Calendar, iCloud, Nextcloud, Fastmail, NetEase (163/126/yeah.net), and any standard CalDAV server. ## Configuration Run the setup script to install dependencies and configure your CalDAV account: ```bash bash setup.sh ``` If running commands manually without setup.sh, install dependencies first: ```bash 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. ### Config file format ```bash # Default account PROVIDER=163 USERNAME=[REDACTED_SECRET] [REDACTED_SECRET] CALDAV_DEFAULT_CALENDAR= ``` The `PROVIDER` preset auto-fills the CalDAV server URL. For custom servers: ```bash PROVIDER=custom USERNAME=[REDACTED_SECRET] [REDACTED_SECRET] CALDAV_SERVER_URL=https://your-caldav-server.com/ ``` ## Multi-Account You can configure additional accounts in the same config file. Each account uses a name prefix (uppercase) on all variables. ```bash # Work account (WORK_ prefix) WORK_PROVIDER=gmail WORK_USERNAME=[REDACTED_SECRET] WORK_PASSWORD=app_password WORK_CALDAV_DEFAULT_CALENDAR=work ``` Add `--account <name>` before the command: ```bash node scripts/caldav.js --account work list-calendars node scripts/caldav.js --account work list-events --start 2026-01-01 --end 2026-12-31 ``` ## Supported Providers | 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 | ## Commands ### list-calendars List all available calendars. ```bash node scripts/caldav.js [--account <name>] list-calendars ``` ### list-events Query events in a time range. ```bash node scripts/caldav.js [--account <name>] list-events --start <date> --end <date> [--calendar <id>] [--force-refresh] ``` ### get-event Get a specific event by UID. ```bash node scripts/caldav.js [--account <name>] get-event --uid <uid> [--calendar <id>] ``` ### create-event Create a new calendar event. ```bash node scripts/caldav.js [--account <name>] create-event --summary <text> --start <datetime> --end <datetime> \ [--description <text>] [--location <text>] [--calendar <id>] ``` ### update-event Update an existing event. ```bash node scripts/caldav.js [--account <name>] update-event --uid <uid> [--summary <text>] [--start <datetime>] \ [--end <datetime>] [--description <text>] [--location <text>] [--calendar <id>] ``` ### delete-event Delete an event. ```bash node scripts/caldav.js [--account <name>] delete-event --uid <uid> [--calendar <id>] ``` ### list-todos List all todos/tasks. ```bash node scripts/caldav.js [--account <name>] list-todos [--status <all|pending|completed>] [--calendar <id>] [--force-refresh] ``` ### create-todo Create a new todo/task. ```bash node scripts/caldav.js [--account <name>] create-todo --summary <text> [--due <date>] \ [--description <text>] [--priority <1-9>] [--calendar <id>] ``` ### update-todo Update an existing todo. ```bash node scripts/caldav.js [--account <name>] update-todo --uid <uid> [--summary <text>] [--due <date>] \ [--status <pending|completed>] [--calendar <id>] ``` ### delete-todo Delete a todo. ```bash node scripts/caldav.js [--account <name>] delete-todo --uid <uid> [--calendar <id>] ``` ### freebusy Query free/busy information for a time range. ```bash node scripts/caldav.js [--account <name>] freebusy --start <datetime> --end <datetime> [--calendar <id>] ``` ### list-accounts List all configured CalDAV accounts. ```bash node scripts/caldav.js list-accounts ``` ### Incremental Sync `list-events` and `list-todos` automatically use incremental sync when available: 1. **sync-token** — only fetches changed resources (preferred) 2. **ctag + etag** — compares calendar tag and resource tags to fetch only changes 3. **full** — fetches all resources (fallback) Sync state is cached at `~/.config/mail-skills/caldav-cache/` per account and calendar. Write operations (create/update/delete) automatically invalidate the cache. Use `--force-refresh` to bypass the cache and force a full sync: ```bash node scripts/caldav.js list-events --start 2026-01-01 --end 2026-12-31 --force-refresh node scripts/caldav.js list-todos --force-refresh ``` ## Security Notes - Configuration is stored at `~/.config/mail-skills/.env` with `600` permissions (owner read/write only) - For Google: regular password is rejected -- generate an App Password at https://myaccount.google.com/apppasswords - For NetEase: use authorization code (授权码), not account password ## Troubleshooting **Connection failed:** - Verify server URL is correct and accessible - Check username and password **Authentication failed:** - For Google: use App Password, not regular password - For NetEase: use authorization code, not account password - For iCloud: use App-Specific Password **No calendars found:** - Verify CalDAV service is enabled in your account settings - Check the server URL includes the correct path ## Related Skills - **[imap-smtp-email](https://clawhub.ai/gzlicanyi/imap-smtp-email)** - Read, search, manage, and send emails via IMAP/SMTP. Supports Gmail, Outlook, NetEase (163/126/188), and any standard IMAP/SMTP server. Install with: ```bash npx skills add https://github.com/gzlicanyi/mail-skills -s imap-smtp-email ``` ## Feedback Issues and pull requests are welcome at [github.com/gzlicanyi/mail-skills](https://github.com/gzlicanyi/mail-skills).


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)