diff --git a/nextcloud_mcp_server/models/deck.py b/nextcloud_mcp_server/models/deck.py index ca46562..8c42bff 100644 --- a/nextcloud_mcp_server/models/deck.py +++ b/nextcloud_mcp_server/models/deck.py @@ -264,14 +264,14 @@ class CreateLabelResponse(BaseResponse): class ListCardsResponse(BaseResponse): """Response model for listing deck cards.""" - cards: List[DeckCard] = Field(description="List of deck cards") + cards: list[DeckCard] = Field(description="List of deck cards") total: int = Field(description="Total number of cards") class ListLabelsResponse(BaseResponse): """Response model for listing deck labels.""" - labels: List[DeckLabel] = Field(description="List of deck labels") + labels: list[DeckLabel] = Field(description="List of deck labels") total: int = Field(description="Total number of labels") diff --git a/nextcloud_mcp_server/server/calendar.py b/nextcloud_mcp_server/server/calendar.py index 0761a72..8881186 100644 --- a/nextcloud_mcp_server/server/calendar.py +++ b/nextcloud_mcp_server/server/calendar.py @@ -44,7 +44,8 @@ def _event_dict_to_summary(event: dict) -> CalendarEventSummary: categories=categories, status=event.get("status"), calendar_name=event.get("calendar_name"), - calendar_display_name=event.get("calendar_display_name"), + calendar_display_name=event.get("calendar_display_name") + or event.get("calendar_name"), ) diff --git a/nextcloud_mcp_server/server/contacts.py b/nextcloud_mcp_server/server/contacts.py index ca64af7..7618988 100644 --- a/nextcloud_mcp_server/server/contacts.py +++ b/nextcloud_mcp_server/server/contacts.py @@ -66,6 +66,8 @@ def configure_contacts_tools(mcp: FastMCP): addressbooks_data = await client.contacts.list_addressbooks() addressbooks = [ AddressBook( + # ab["name"] is a short slug like "contacts", not a full CardDAV URI; + # all tools use it as a path segment: f"{carddav_path}/{name}/" uri=ab["name"], displayname=ab.get("display_name", ab["name"]), ctag=ab.get("getctag"), diff --git a/tests/unit/test_response_models.py b/tests/unit/test_response_models.py index 10cec40..56c781e 100644 --- a/tests/unit/test_response_models.py +++ b/tests/unit/test_response_models.py @@ -477,7 +477,7 @@ def test_event_dict_to_summary_missing_optional_fields(): @pytest.mark.unit def test_event_dict_to_summary_calendar_name_without_display_name(): - """Test single-calendar path: calendar_name set, display_name absent.""" + """Test single-calendar path: calendar_name set, display_name absent falls back.""" event = { "uid": "evt-006", "title": "Personal Errand", @@ -487,4 +487,4 @@ def test_event_dict_to_summary_calendar_name_without_display_name(): summary = _event_dict_to_summary(event) assert summary.calendar_name == "personal" - assert summary.calendar_display_name is None + assert summary.calendar_display_name == "personal"