AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Nextcloud Syntax Webdav

skill-impertio-studio-nextcloud-claude-skill-package-nextcloud-syntax-webdav · by Impertio-Studio

>

No reviews yet
0 installs
16 views
0.0% view→install

Install

$ agentstack add skill-impertio-studio-nextcloud-claude-skill-package-nextcloud-syntax-webdav

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-impertio-studio-nextcloud-claude-skill-package-nextcloud-syntax-webdav)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Nextcloud Syntax Webdav? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

nextcloud-syntax-webdav

Quick Reference

DAV Endpoint Structure

| Endpoint | Purpose | |----------|---------| | /remote.php/dav/files/{username}/ | File operations | | /remote.php/dav/calendars/{username}/ | Calendar access (CalDAV) | | /remote.php/dav/addressbooks/users/{username}/ | Contacts (CardDAV) | | /remote.php/dav/uploads/{username}/ | Chunked upload staging | | /remote.php/dav/trashbin/{username}/ | Trash operations | | /remote.php/dav/versions/{username}/ | File version history | | /public.php/dav/files/{share_token}/ | Public share access (NC 29+) |

File Operations

| Method | Purpose | Required Headers | |--------|---------|-----------------| | PROPFIND | List directory / get properties | Depth: 0\|1 + XML body | | GET | Download file | None | | PUT | Upload file | Optional: X-OC-MTime, OC-Checksum | | MKCOL | Create directory | None | | MOVE | Rename or move | Destination (full URL) | | COPY | Duplicate file | Destination (full URL) | | DELETE | Remove file or directory | None |

Property Namespaces

| URI | Prefix | Origin | |-----|--------|--------| | DAV: | d | WebDAV standard (RFC 4918) | | http://owncloud.org/ns | oc | ownCloud legacy properties | | http://nextcloud.org/ns | nc | Nextcloud-specific properties | | http://open-collaboration-services.org/ns | ocs | Open Collaboration Services | | http://open-cloud-mesh.org/ns | ocm | Open Cloud Mesh |

Common Properties

| Property | Namespace | Type | Description | |----------|-----------|------|-------------| | getlastmodified | d | datetime | Last modification time | | getetag | d | string | Entity tag for caching | | getcontenttype | d | string | MIME type | | getcontentlength | d | integer | File size in bytes | | resourcetype | d | element | ` for directories | | fileid | oc | integer | Nextcloud internal file ID | | permissions | oc | string | Permission flags (RGDNVCK) | | favorite | oc | integer | 0 or 1 | | comments-unread | oc | integer | Unread comment count | | has-preview | nc | boolean | Preview generation available | | mount-type | nc | string | Storage mount type | | is-encrypted | nc | integer | End-to-end encryption flag | | lock | nc | integer | File lock status | | share-attributes | nc` | JSON | Share attribute metadata |

Special Request Headers

| Header | Purpose | Direction | |--------|---------|-----------| | X-OC-MTime | Set modification timestamp (Unix epoch) | Request | | X-OC-CTime | Set creation timestamp (Unix epoch) | Request | | OC-Checksum | Store checksum (MD5:xxx, SHA1:xxx, SHA256:xxx) | Request | | X-Hash | Request server to compute hash (md5, sha1, sha256) | Request | | X-Hash-MD5 / X-Hash-SHA1 / X-Hash-SHA256 | Computed hash values | Response | | OC-Etag | File etag on create/move/copy | Response | | OC-FileId | File identifier (padded-id + instance-id) | Response | | OC-Total-Length | Total file size for quota checks | Request | | X-NC-WebDAV-AutoMkcol | Auto-create parent directories (set to 1) | Request | | Overwrite | T (overwrite) or F (fail if exists) on MOVE/COPY | Request |

Depth Header Values (PROPFIND)

| Value | Behavior | |-------|----------| | 0 | Target resource only | | 1 | Target + immediate children | | infinity | Recursive (may be disabled on server) |

Critical Warnings

NEVER omit the Destination header on MOVE or COPY requests -- the server returns 400 Bad Request.

NEVER use Depth: infinity on large directories -- the server may time out or reject the request. ALWAYS use Depth: 1 and paginate manually.

NEVER skip checksum verification on important uploads -- ALWAYS send the OC-Checksum header with format ALGO:HASH (e.g., SHA256:abc123).

NEVER assume chunk assembly order -- chunks are assembled in numeric filename order regardless of upload sequence.

NEVER use relative paths in the Destination header -- ALWAYS use the full absolute URL including scheme and host.

ALWAYS authenticate WebDAV requests with basic auth (username + app password) or bearer token.

ALWAYS include the XML namespace declarations in PROPFIND request bodies -- omitting them causes property resolution failures.

ALWAYS use Depth: 1 as the default for directory listings -- it is the most common and safest option.


Essential Patterns

Pattern 1: List Directory Contents (PROPFIND)

curl 'https://cloud.example.com/remote.php/dav/files/username/Documents' \
  --user "$USER:$APP_PASSWORD" \
  --request PROPFIND \
  --header 'Depth: 1' \
  --data '
    
      
        
        
        
        
        
        
        
      
    '

Response is a 207 Multi-Status XML with one `` per item. The first response is the directory itself.

Pattern 2: Upload File with Metadata

curl 'https://cloud.example.com/remote.php/dav/files/username/report.pdf' \
  --user "$USER:$APP_PASSWORD" \
  --request PUT \
  --upload-file ./report.pdf \
  --header 'X-OC-MTime: 1700000000' \
  --header 'OC-Checksum: SHA256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' \
  --header 'X-NC-WebDAV-AutoMkcol: 1'

The X-NC-WebDAV-AutoMkcol: 1 header auto-creates any missing parent directories.

Pattern 3: Move/Rename a File

curl 'https://cloud.example.com/remote.php/dav/files/username/old-name.txt' \
  --user "$USER:$APP_PASSWORD" \
  --request MOVE \
  --header 'Destination: https://cloud.example.com/remote.php/dav/files/username/subfolder/new-name.txt' \
  --header 'Overwrite: F'

Overwrite: F prevents overwriting an existing file at the destination. Use Overwrite: T (default) to allow it.

Pattern 4: Chunked Upload v2 (Large Files)

Three-step protocol for reliable large file uploads:

Step 1: Create upload directory

curl -X MKCOL --user "$USER:$APP_PASSWORD" \
  'https://cloud.example.com/remote.php/dav/uploads/username/myapp-unique-upload-id' \
  --header 'Destination: https://cloud.example.com/remote.php/dav/files/username/dest/largefile.zip'

Step 2: Upload chunks (5MB-5GB each)

# Chunk 1
curl -X PUT --user "$USER:$APP_PASSWORD" \
  'https://cloud.example.com/remote.php/dav/uploads/username/myapp-unique-upload-id/00001' \
  --data-binary @chunk1.bin \
  --header 'Destination: https://cloud.example.com/remote.php/dav/files/username/dest/largefile.zip' \
  --header 'OC-Total-Length: 52428800'

# Chunk 2
curl -X PUT --user "$USER:$APP_PASSWORD" \
  'https://cloud.example.com/remote.php/dav/uploads/username/myapp-unique-upload-id/00002' \
  --data-binary @chunk2.bin \
  --header 'Destination: https://cloud.example.com/remote.php/dav/files/username/dest/largefile.zip' \
  --header 'OC-Total-Length: 52428800'

Step 3: Assemble file (MOVE .file)

curl -X MOVE --user "$USER:$APP_PASSWORD" \
  'https://cloud.example.com/remote.php/dav/uploads/username/myapp-unique-upload-id/.file' \
  --header 'Destination: https://cloud.example.com/remote.php/dav/files/username/dest/largefile.zip' \
  --header 'OC-Total-Length: 52428800' \
  --header 'X-OC-MTime: 1700000000'

Constraints: Chunk names must be numbers 1-10000. Final chunk can be smaller than 5MB. Upload directory expires after 24 hours of inactivity. OC-Total-Length triggers quota validation (returns 507 Insufficient Storage if exceeded). To abort: DELETE the upload directory.

Pattern 5: Public Share Access (NC 29+)

# Public share without password
curl 'https://cloud.example.com/public.php/dav/files/SHARE_TOKEN/' \
  --request PROPFIND \
  --header 'Depth: 1' \
  --data ''

# Public share with password
curl 'https://cloud.example.com/public.php/dav/files/SHARE_TOKEN/' \
  --user 'anonymous:' \
  --request PROPFIND \
  --header 'Depth: 1' \
  --data ''

Password-protected shares use basic auth with username anonymous and the share password as the password.

Pattern 6: Download Folder as ZIP

curl 'https://cloud.example.com/remote.php/dav/files/username/ProjectFolder' \
  --user "$USER:$APP_PASSWORD" \
  --header 'Accept: application/zip' \
  --output project.zip

Optionally filter which files to include using the X-NC-Files header or files query parameter (JSON array of filenames).


Chunked Upload Decision Tree

File size > 5MB?
├── YES → Use chunked upload v2
│   ├── Generate unique upload ID (UUID recommended)
│   ├── MKCOL → create upload directory
│   ├── Split file into 5MB-5GB chunks
│   ├── PUT each chunk (numbered 00001-10000)
│   ├── MOVE .file → assemble at destination
│   └── On failure → DELETE upload directory to clean up
└── NO → Use simple PUT
    ├── Include OC-Checksum for integrity
    └── Include X-OC-MTime to preserve timestamp

Permission Flags (oc:permissions)

| Flag | Meaning | |------|---------| | R | Read (Shareable) | | G | Read (not shareable) | | D | Delete | | N | Rename/Move (NV = move into) | | V | Move from | | C | Create (new files/folders) | | K | Create (new files only, not folders) | | W | Write (update content) |


Reference Links

  • [references/methods.md](references/methods.md) -- DAV operations, property details, namespace reference, chunked upload protocol
  • [references/examples.md](references/examples.md) -- Complete curl examples for all DAV operations
  • [references/anti-patterns.md](references/anti-patterns.md) -- Common WebDAV mistakes and how to avoid them

Official Sources

  • https://docs.nextcloud.com/server/latest/developermanual/clientapis/WebDAV/index.html
  • https://docs.nextcloud.com/server/latest/developermanual/clientapis/WebDAV/basic.html
  • https://docs.nextcloud.com/server/latest/developermanual/clientapis/WebDAV/chunkedfileupload_v2.html
  • https://docs.nextcloud.com/server/latest/developermanual/clientapis/WebDAV/trashbin.html
  • https://docs.nextcloud.com/server/latest/developermanual/clientapis/WebDAV/versions.html

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.