Radicale uses default DAV: namespace (no d: prefix) and CR: for CardDAV
instead of c:. Fixed all regex patterns to handle both variants:
- <href> and <d:href>
- <displayname> and <d:displayname>
- <CR:address-data> and <c:address-data>
- <C:calendar-data> and <c:calendar-data>
- </response> and </d:response>
Also fixed calendar discovery to match <C:calendar/> resourcetype
instead of looking for VEVENT string in the response.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Files:
- read_file returns images inline (jpg/png/gif/webp up to 10MB)
- Text files returned as text, binary files as metadata only
Contacts:
- get_contact includes contact photo as inline image if available
- New tool: set_contact_photo (base64 jpeg/png → VCard PHOTO)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Self-hosted MCP servers with OAuth client_credentials auth.
Each server connects to a different backend:
- Mail: reads Maildir IMAP backups
- Calendar/Tasks: CalDAV against Radicale
- Contacts: CardDAV against Radicale
- Files: WebDAV against oCIS
- Notes: Joplin REST API
Credentials externalized to config.json (not in repo).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>