- CLI tools: nextcloud-client, nextcloud-contacts, nextcloud-calendar, nextcloud-mail - Build script with compile-time credentials - Skills for all four tools - Email tool supports IMAP/SMTP with attachment download
300 lines
7.3 KiB
Markdown
300 lines
7.3 KiB
Markdown
# Nextcloud Contacts Skill
|
|
|
|
**Purpose:** Manage contacts and address books on Nextcloud servers using the nextcloud-contacts CLI tool.
|
|
|
|
## Overview
|
|
|
|
This skill provides contact operations for Nextcloud using the nextcloud-contacts Go binary. The CLI tool handles all CardDAV operations and vCard parsing.
|
|
|
|
## Prerequisites
|
|
|
|
- Go compiler (for building CLI tool)
|
|
- Nextcloud server URL
|
|
- Nextcloud username
|
|
- Nextcloud password (for app token retrieval)
|
|
- Contacts app enabled on Nextcloud
|
|
|
|
## Bootstrap Process
|
|
|
|
**This skill will automatically build all three Nextcloud CLI tools with your app token and then immediately forget all credentials.**
|
|
|
|
**Step 1: The skill will ask for:**
|
|
- Nextcloud server URL (e.g., https://teamworkapps.com)
|
|
- Nextcloud username (e.g., wltbagent@shortcutsolutions.net)
|
|
- Nextcloud password (your normal login credentials)
|
|
|
|
**Step 2: The skill will:**
|
|
1. **Authenticate to Nextcloud** using your username and password
|
|
2. **Retrieve or generate an app token** from Nextcloud settings
|
|
3. **Build** all three CLI tools (files, contacts, calendar) with the app token
|
|
4. **Verify** that all three binaries were created
|
|
5. **Immediately forget** all credentials (username, password, and app token are never stored)
|
|
|
|
**Step 3: You're ready!**
|
|
- Use any tool without passing credentials (app token is embedded at compile time)
|
|
- Example: `nextcloud-list-books` (no --url, --user, --token needed)
|
|
- Example: `nextcloud-create-contact --name "John" --email "john@example.com"`
|
|
|
|
**Security Note:**
|
|
- **All credentials** (username, password, and app token) are only used during the bootstrap process
|
|
- **App token is retrieved automatically** - you don't need to find it manually
|
|
- **Credentials are never stored permanently** in any file or environment
|
|
- **The app token is embedded** in the compiled binary at build time
|
|
- **The compiled binary stays** on your local system only
|
|
- **Do not distribute** built binaries outside your trusted environment
|
|
|
|
## Configuration
|
|
|
|
All credentials are embedded at compile time via Go ldflags. No runtime configuration needed.
|
|
|
|
### Build-Time Configuration (Automatic)
|
|
|
|
The skill will handle this automatically during bootstrap:
|
|
```bash
|
|
cd projects/nextcloud-integration/tools/go/nextcloud-contacts
|
|
|
|
go build -ldflags="-X 'main.BuildServerURL=https://teamworkapps.com' \
|
|
-X 'main.BuildUsername=wltbagent@shortcutsolutions.net' \
|
|
-X 'main.BuildToken=YOUR_APP_TOKEN'" \
|
|
-o ~/bin/nextcloud-contacts .
|
|
```
|
|
|
|
### Runtime Configuration (Fallback)
|
|
|
|
If not set at build time, the tool will check these environment variables:
|
|
|
|
```bash
|
|
export NEXTCLOUD_URL="https://cloud.example.com"
|
|
export NEXTCLOUD_USER="your-username"
|
|
export NEXTCLOUD_TOKEN="your-app-token"
|
|
```
|
|
|
|
### Command-Line Flags (Fallback)
|
|
|
|
Override credentials for specific commands using:
|
|
- `--url`
|
|
- `--user`
|
|
- `--token`
|
|
|
|
**Priority:** Build-time ldflags > Environment variables > Command-line flags
|
|
|
|
## Tool Reference
|
|
|
|
All tools can be used without passing credentials.
|
|
|
|
### `nextcloud-list-books` - List all address books
|
|
|
|
```bash
|
|
nextcloud-list-books
|
|
```
|
|
|
|
**Example:**
|
|
```bash
|
|
# List all address books
|
|
nextcloud-list-books
|
|
```
|
|
|
|
**Output:**
|
|
```
|
|
Address Books:
|
|
--------------
|
|
Name: Contacts
|
|
Path: contacts
|
|
ETag:
|
|
|
|
Name: Recently contacted
|
|
Path: z-app-generated--contactsinteraction--recent
|
|
ETag:
|
|
```
|
|
|
|
### `nextcloud-list-contacts` - List contacts in an address book
|
|
|
|
```bash
|
|
# List contacts in default book
|
|
nextcloud-list-contacts
|
|
|
|
# List contacts in specific book
|
|
nextcloud-list-contacts --book "work-contacts"
|
|
```
|
|
|
|
**Example:**
|
|
```bash
|
|
# List contacts
|
|
nextcloud-list-contacts
|
|
```
|
|
|
|
**Output:**
|
|
```
|
|
Contacts in 'contacts':
|
|
--------------
|
|
UID: 1770849610657274975
|
|
ETag: "037658b635c2523a8cf70085e81e4f69"
|
|
```
|
|
|
|
### `nextcloud-get-contact` - Retrieve a specific contact
|
|
|
|
```bash
|
|
# Get contact by UID
|
|
nextcloud-get-contact --uid "1770849610657274975"
|
|
```
|
|
|
|
**Example:**
|
|
```bash
|
|
# Get contact
|
|
nextcloud-get-contact --uid "contact-uid"
|
|
```
|
|
|
|
**Output:**
|
|
```
|
|
Contact: 1770849610657274975
|
|
--------------
|
|
BEGIN:VCARD
|
|
VERSION:3.0
|
|
UID:1770849610657274975
|
|
FN:John Doe
|
|
EMAIL;TYPE=INTERNET:john@example.com
|
|
TEL;TYPE=VOICE:555-1234
|
|
END:VCARD
|
|
```
|
|
|
|
### `nextcloud-create-contact` - Create a new contact
|
|
|
|
```bash
|
|
# Create contact with fields
|
|
nextcloud-create-contact \
|
|
--name "John Doe" \
|
|
--email "john@example.com" \
|
|
--phone "555-1234"
|
|
|
|
# Create contact from vCard file
|
|
nextcloud-create-contact --vcard /path/to/contact.vcf
|
|
```
|
|
|
|
**Example:**
|
|
```bash
|
|
# Create a contact
|
|
nextcloud-create-contact --name "John Doe" --email "john@example.com" --phone "555-1234"
|
|
```
|
|
|
|
**Output:**
|
|
```
|
|
Contact created successfully
|
|
```
|
|
|
|
### `nextcloud-delete-contact` - Delete a contact
|
|
|
|
```bash
|
|
# Delete contact by UID
|
|
nextcloud-delete-contact --uid "1770849610657274975"
|
|
```
|
|
|
|
**Example:**
|
|
```bash
|
|
# Delete a contact
|
|
nextcloud-delete-contact --uid "contact-uid"
|
|
```
|
|
|
|
**Output:**
|
|
```
|
|
Contact deleted: 1770849610657274975
|
|
```
|
|
|
|
## Use Cases
|
|
|
|
### 1. Contact Management Workflow
|
|
|
|
```bash
|
|
# Create a new contact
|
|
nextcloud-create-contact --name "Jane Smith" --email "jane@example.com" --phone "555-5678"
|
|
|
|
# Verify contact was created
|
|
nextcloud-list-contacts | grep "Jane"
|
|
|
|
# Retrieve contact details
|
|
nextcloud-get-contact --uid "$(nextcloud-list-contacts | grep 'Jane' | awk '{print $2}')"
|
|
```
|
|
|
|
### 2. Bulk Contact Import
|
|
|
|
```bash
|
|
# Import contacts from vCard files
|
|
for vcard in contacts/*.vcf; do
|
|
nextcloud-create-contact --vcard "$vcard"
|
|
done
|
|
```
|
|
|
|
### 3. Contact Search Workflow
|
|
|
|
```bash
|
|
# Search for contact by UID pattern
|
|
nextcloud-list-contacts | grep "pattern"
|
|
|
|
# Get detailed contact info
|
|
nextcloud-get-contact --uid "found-uid"
|
|
```
|
|
|
|
### 4. Contact Cleanup
|
|
|
|
```bash
|
|
# List all contacts
|
|
nextcloud-list-contacts
|
|
|
|
# Delete specific contacts
|
|
nextcloud-delete-contact --uid "old-contact-uid"
|
|
|
|
# Verify deletion
|
|
nextcloud-list-contacts
|
|
```
|
|
|
|
## vCard Format
|
|
|
|
The CLI tool generates vCard 3.0 format contacts:
|
|
|
|
```vcf
|
|
BEGIN:VCARD
|
|
VERSION:3.0
|
|
UID:<timestamp>
|
|
FN:<formatted-name>
|
|
EMAIL;TYPE=INTERNET:<email>
|
|
TEL;TYPE=VOICE:<phone>
|
|
ORG:<company>
|
|
TITLE:<title>
|
|
END:VCARD
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
The nextcloud-contacts binary provides clear error messages:
|
|
|
|
| Error | Meaning | Action |
|
|
|-------|---------|--------|
|
|
| Error: credentials not set at build time | Need to re-bootstrap | Ask skill to re-run bootstrap |
|
|
| Error: UID is required for get-contact operation | Missing UID | Provide contact UID |
|
|
| Error: contact name is required | Missing name | Provide --name flag |
|
|
| unexpected status: 404 | Contact not found | Verify UID and address book |
|
|
| unexpected status: 401 | Unauthorized | App token expired, re-bootstrap |
|
|
| get contact failed with status: xxx | Read error | Check contact exists |
|
|
|
|
## Best Practices
|
|
|
|
1. No runtime configuration needed (credentials embedded)
|
|
2. Store UIDs when creating contacts for later retrieval
|
|
3. Verify operations by listing after create/delete
|
|
4. Handle vCard format when importing from files
|
|
5. Use display names not paths when referring to address books
|
|
|
|
## Dependencies
|
|
|
|
- `~/bin/nextcloud-contacts` - Go binary for CardDAV operations
|
|
- No external XML parsing needed (handled by Go)
|
|
- vCard files use standard RFC 6350 format
|
|
|
|
## Related Skills
|
|
|
|
- **nextcloud-files** - For storing contact photos as files
|
|
- **nextcloud-calendar** - For linking contacts to calendar events
|
|
|
|
---
|
|
|
|
*OpenClaw skill wrapper for nextcloud-contacts Go binary with automatic app token retrieval*
|