| name | openclaw-nextcloud |
| description | Manage Notes, Tasks, Calendar, Files, and Contacts in your Nextcloud instance via CalDAV, WebDAV, and Notes API. Use for creating notes, managing todos and calendar events, uploading/downloading files, and managing contacts. |
| license | MIT |
| compatibility | Requires Node.js 20+. Needs network access to Nextcloud instance. |
| allowed-tools | Bash Read |
OpenClaw Nextcloud Skill
This skill provides integration with a Nextcloud instance. It supports access to Notes, Tasks (Todos), Calendars, Files, and Contacts.
Configuration
The skill requires the following environment variables:
NEXTCLOUD_URL: The base URL of your Nextcloud instance (e.g., https://cloud.example.com).
NEXTCLOUD_USER: Your Nextcloud username.
NEXTCLOUD_TOKEN: An App Password (recommended) or your login password.
Features
1. Notes (Read/Write)
- List, get, create, update, and delete notes.
- API:
index.php/apps/notes/api/v1/notes
2. Tasks / Todos (Read/Write)
- List, create, update, delete, and complete tasks.
- API: CalDAV (VTODO).
3. Calendar (Read/Write)
- List, create, update, and delete events.
- API: CalDAV (VEVENT).
4. Files (Read/Write)
- List, search, upload, download, and delete files.
- API: WebDAV.
5. Contacts (Read/Write)
- List, get, create, update, delete, and search contacts.
- API: CardDAV.
Usage
Run the skill via the bundled script.
node scripts/nextcloud.js <command> <subcommand> [options]
Commands
Notes
notes list
notes get --id <id>
notes create --title <t> --content <c> [--category <cat>]
notes edit --id <id> [--title <t>] [--content <c>] [--category <cat>]
notes delete --id <id>
Tasks
tasks list [--calendar <c>]
tasks create --title <t> [--calendar <c>] [--due <d>] [--priority <p>] [--description <d>]
tasks edit --uid <u> [--calendar <c>] [--title <t>] [--due <d>] [--priority <p>] [--description <d>]
tasks delete --uid <u> [--calendar <c>]
tasks complete --uid <u> [--calendar <c>]
Calendar Events
calendar list [--from <iso>] [--to <iso>] (Defaults to next 7 days)
calendar create --summary <s> --start <iso> --end <iso> [--calendar <c>] [--description <d>]
calendar edit --uid <u> [--calendar <c>] [--summary <s>] [--start <iso>] [--end <iso>] [--description <d>]
calendar delete --uid <u> [--calendar <c>]
Calendars (list available calendars)
calendars list [--type <tasks|events>]
Files
files list [--path <path>]
files search --query <q>
files get --path <path> (download file content)
files upload --path <path> --content <content>
files delete --path <path>
Contacts
contacts list [--addressbook <ab>]
contacts get --uid <u> [--addressbook <ab>]
contacts search --query <q> [--addressbook <ab>]
contacts create --name <n> [--addressbook <ab>] [--email <e>] [--phone <p>] [--organization <o>] [--title <t>] [--note <n>]
contacts edit --uid <u> [--addressbook <ab>] [--name <n>] [--email <e>] [--phone <p>] [--organization <o>] [--title <t>] [--note <n>]
contacts delete --uid <u> [--addressbook <ab>]
Address Books (list available address books)
Output Format
All outputs are JSON formatted.
Tasks List Output
{
"status": "success",
"data": [
{
"uid": "unique-task-id",
"calendar": "Calendar Name",
"summary": "Task title",
"status": "NEEDS-ACTION",
"due": "20260201T153000Z",
"priority": 0
}
]
}
due: CalDAV format date (YYYYMMDDTHHmmssZ) or null
priority: 0-9 (0 = undefined, 1 = highest, 9 = lowest) or null
Calendar Events List Output
{
"status": "success",
"data": [
{
"uid": "unique-event-id",
"calendar": "Calendar Name",
"summary": "Event title",
"start": "20260205T100000Z",
"end": "20260205T110000Z"
}
]
}
Contacts List Output
{
"status": "success",
"data": [
{
"uid": "unique-contact-id",
"addressBook": "Address Book Name",
"fullName": "John Doe",
"name": "Doe;John;;;",
"phones": ["+1234567890"],
"emails": ["john@example.com"],
"organization": "ACME Inc",
"title": "Developer",
"note": "Met at conference"
}
]
}
phones: Array of phone numbers or null
emails: Array of email addresses or null
name: Structured name in vCard format (Last;First;Middle;Prefix;Suffix)
General Format
{
"status": "success",
"data": [ ... ]
}
or
{
"status": "error",
"message": "Error description"
}
Agent Behavior: Default Calendar Selection
When creating tasks or calendar events, if the user does not specify a calendar:
-
First time (no default set):
- Run
calendars list --type tasks (for tasks) or calendars list --type events (for events)
- Ask the user which calendar to use from the list
- Ask if they want to set it as the default for future operations
- Remember their choice in memory
-
If user sets a default:
- Remember
default_task_calendar and/or default_event_calendar
- Use automatically for subsequent operations without asking
-
If user declines to set a default:
- Ask again next time they create a task/event without specifying a calendar
-
User can always override:
- Explicitly specifying
--calendar always takes precedence over the default
Memory Keys
default_task_calendar: Default calendar name for tasks (VTODO)
default_event_calendar: Default calendar name for events (VEVENT)
Agent Behavior: Default Address Book Selection
When creating contacts, if the user does not specify an address book:
-
First time (no default set):
- Run
addressbooks list
- Ask the user which address book to use from the list
- Ask if they want to set it as the default for future operations
- Remember their choice in memory
-
If user sets a default:
- Remember
default_addressbook
- Use automatically for subsequent operations without asking
-
If user declines to set a default:
- Ask again next time they create a contact without specifying an address book
-
User can always override:
- Explicitly specifying
--addressbook always takes precedence over the default
Memory Keys
default_addressbook: Default address book name for contacts
Agent Behavior: Presenting Information
When displaying data to the user, format it in a readable way. Output may be sent to messaging platforms (Telegram, WhatsApp, etc.) where markdown does not render, so avoid markdown formatting.
General Guidelines
- Use emojis to make output scannable and friendly
- Do NOT use markdown formatting (no bold, italic,
code, tables, or lists with - or *)
- Use plain text with line breaks for structure
- Convert technical formats (like CalDAV dates) to human-readable formats
- Group related items logically
Emoji Reference
Tasks: โ
(completed), โฌ (pending), ๐ด (high priority), ๐ก (medium), ๐ข (low)
Calendar: ๐
(event), โฐ (time), ๐ (location)
Notes: ๐ (note), ๐ (category)
Files: ๐ (file), ๐ (folder), ๐พ (size)
Contacts: ๐ค (person), ๐ง (email), ๐ฑ (phone), ๐ข (organization)
Status: โจ (created), โ๏ธ (updated), ๐๏ธ (deleted), โ (error)
Example Presentations
Tasks:
๐ Your Tasks
โฌ ๐ด Buy groceries โ Due: Tomorrow 3:30 PM
โฌ ๐ก Review PR #42 โ Due: Feb 5
โ
Send email to client
Calendar Events:
๐
Upcoming Events
๐๏ธ Team Standup
โฐ Mon, Feb 3 โข 10:00 AM - 10:30 AM
๐ Zoom
๐๏ธ Project Review
โฐ Wed, Feb 5 โข 2:00 PM - 3:00 PM
Contacts:
๐ค John Doe
๐ง john@example.com
๐ฑ +1 234 567 890
๐ข ACME Inc โ Developer
Files:
๐ Documents/
๐ report.pdf (2.3 MB)
๐ notes.txt (4 KB)
๐ Archive/
Date/Time Formatting
Convert CalDAV format 20260205T100000Z to readable format like Wed, Feb 5 โข 10:00 AM
Show relative dates when helpful: "Tomorrow", "Next Monday", "In 3 days"
Use the user's local timezone when possible