Skill flagged — review recommended

ClawHub Security found sensitive or high-impact capabilities. Review the scan results before using.

synology-calendar

v1.0.1

Manage Synology Calendar events and todos via API. Supports calendars, events, todos, and contacts. Based on official Calendar API Guide (v5).

0· 327· 2 versions· 0 current· 0 all-time· Updated 1h ago· MIT-0
byAbner@fpengziyang

Install

openclaw skills install synology-calendar

Synology Calendar API Skill

Overview

Manage Synology Calendar using the official Calendar API.

Documentation: Calendar_API_Guide_enu.pdf

Connection

Environment Variables

export SYNOLOGY_URL="http://{nas_ip}:5000"  # 内网地址
export SYNOLOGY_USER="{username}"
export SYNOLOGY_PASSWORD="your-password"

Quick Start

from client import SynologyCalendar

cal = SynologyCalendar()
cal.login()

# List calendars
calendars = cal.get_calendars()
for c in calendars:
    print(f"{c['cal_id']}: {c['cal_displayname']}")

cal.logout()

API Reference

Calendar Operations (SYNO.Cal.Cal)

MethodDescriptionStatus
get_calendars()List all calendars✅ Working
get_calendar(cal_id)Get calendar details✅ Working
create_calendar(...)Create calendar✅ Working
delete_calendar(cal_id)Delete calendar✅ Working

Event Operations (SYNO.Cal.Event)

MethodDescriptionStatus
list_events(cal_id_list)List events✅ Working
get_event(evt_id)Get event details✅ Working
create_event(...)Create event✅ Working
delete_event(evt_id)Delete event✅ Working

Event Creation Notes:

✅ Working:

  • All event types now work correctly with v1 API

⚠️ Critical: SID must be in URL parameter, not JSON body

The Synology Calendar v1 API requires the _sid parameter in the URL query string, not in the JSON body.

create_event Parameters:

ParameterTypeRequiredExample
cal_idstring/admin/home/
summarystringEvent title
dtstartint1770440000
dtendint1770443600
is_all_dayboolfalse
is_repeat_evtboolfalse
colorstring#D9AE00
descriptionstringDescription
notify_settingarray[]
participantarray[]
timezonestring(if not all-day)Asia/Shanghai

Example:

# Non-all-day event (working)
cal.create_event(
    cal_id='/{username}/home/',
    summary='Meeting',
    dtstart=now,
    dtend=now + 3600,
    is_all_day=False,
    is_repeat_evt=False,
    description='Team meeting',
    color='#D9AE00',
    timezone='Asia/Shanghai'
)

Todo Operations (SYNO.Cal.Todo)

MethodDescriptionStatus
create_todo(...)Create task✅ Working
list_todos(...)List tasks✅ Working
get_todo(evt_id)Get task details✅ Working
delete_todo(evt_id)Delete task✅ Working
complete_todo(evt_id)Mark complete✅ Working

Contact Operations (SYNO.Cal.Contact)

MethodDescriptionStatus
list_contacts()List participants✅ Working

CLI Usage

# Login
python client.py login

# List calendars
python client.py list-calendars

# List todos
python client.py list-todos --cal-id "/{username}/home_todo/"

# Create todo
python client.py create-todo \
  --cal-id "/{username}/home_todo/" \
  --title "Task name"

# Complete todo
python client.py complete-todo --evt-id "1012"

Known Issues

Event Creation (Fixed with v1 API)

Previous Issue: Event creation returned error 9009 due to:

  1. Using v5 API instead of v1 API
  2. Missing original_cal_id parameter
  3. SID passed in wrong location (JSON body vs URL parameter)

Solution: Use v1 API with:

  • cal_id from get_calendars() response
  • original_cal_id = cal_id (for non-shared calendars)
  • SID in URL parameter: ?_sid=xxx

Calendars

IDNameType
/{username}/home/My Calendarevent
/{username}/home_todo/Inboxtodo

Links

Version tags

latestvk97dj8sf21g63y793911sxvvkx827g9j