diff --git a/.env.example b/.env.example index 5833b23..1fef6db 100644 --- a/.env.example +++ b/.env.example @@ -51,10 +51,9 @@ CALDAV_PASSWORD=your-caldav-password # - Nextcloud: https://cloud.example.com/remote.php/dav # - Fastmail: https://carddav.fastmail.com/dav/addressbooks/user/you@fastmail.com # - Radicale: https://radicale.example.com/user/ -CARDDAV_URL=https://carddav.example.com/dav +CARDDAV_URL=https://carddav.example.com/dav/addressbooks/users/user@example.com/contacts/ CARDDAV_USERNAME=user@example.com CARDDAV_PASSWORD=your-carddav-password -CONTACTS_ADDRESSBOOK_URL=https://carddav.example.com/dav/addressbooks/users/user@example.com/contacts/ # ============================================================================= # Cache Configuration diff --git a/README.md b/README.md index 13baba5..faa34a7 100644 --- a/README.md +++ b/README.md @@ -91,13 +91,12 @@ ICS_CALENDAR_TIMEOUT=20 ICS_CALENDARS=Team|https://example.com/team.ics,Family|https://example.com/family.ics ICS_CALENDAR_TIMEOUT=20 -CARDDAV_URL=https://carddav.example.com/dav +CARDDAV_URL=https://carddav.example.com/dav/addressbooks/users/you@example.com/contacts/ CARDDAV_USERNAME=you@example.com CARDDAV_PASSWORD=your-password -CONTACTS_ADDRESSBOOK_URL=https://carddav.example.com/dav/addressbooks/users/you@example.com/contacts/ ``` -Contacts tools always use `CONTACTS_ADDRESSBOOK_URL` (full CardDAV address book URL). Listing address books is not exposed via MCP. +Contacts tools always use `CARDDAV_URL` as the full CardDAV address book URL. Listing address books is not exposed via MCP. ICS calendars are optional and read-only. Set `ICS_CALENDARS` to a comma-separated list of entries, each as `name|url` or just `url` if you want the name inferred. diff --git a/src/config.py b/src/config.py index f282acb..026083a 100644 --- a/src/config.py +++ b/src/config.py @@ -40,10 +40,6 @@ class Settings(BaseSettings): carddav_url: Optional[str] = Field(default=None, alias="CARDDAV_URL") carddav_username: Optional[str] = Field(default=None, alias="CARDDAV_USERNAME") carddav_password: Optional[SecretStr] = Field(default=None, alias="CARDDAV_PASSWORD") - contacts_addressbook_url: Optional[str] = Field( - default=None, - alias="CONTACTS_ADDRESSBOOK_URL", - ) # SQLite Cache sqlite_path: str = Field(default="/data/cache.db", alias="SQLITE_PATH") @@ -154,7 +150,6 @@ class Settings(BaseSettings): self.carddav_url, self.carddav_username, self.carddav_password, - self.contacts_addressbook_url, ]) def is_notification_configured(self) -> bool: diff --git a/src/services/contacts_service.py b/src/services/contacts_service.py index 4581354..92376cf 100644 --- a/src/services/contacts_service.py +++ b/src/services/contacts_service.py @@ -495,6 +495,6 @@ class ContactsService: def _resolve_addressbook_id(self, addressbook_id: Optional[str]) -> str: if addressbook_id: return addressbook_id - if self.settings.contacts_addressbook_url: - return self.settings.contacts_addressbook_url - raise ValueError("CONTACTS_ADDRESSBOOK_URL must be set to use contacts tools") + if self.settings.carddav_url: + return self.settings.carddav_url + raise ValueError("CARDDAV_URL must be set to use contacts tools")