fix: convert BDAY datetime.date to string before Pydantic validation

pythonvCard4 parses vCard BDAY fields into datetime.date objects, but
the Contact model expects Optional[str]. This caused a validation error
that crashed the entire contact list. Convert at the client layer
(consistent with the calendar client pattern) with a defensive check
at the server mapping layer.

Closes #672

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Chris Coutinho
2026-04-01 09:11:45 +02:00
co-authored by Claude Opus 4.6
parent 97ae750916
commit da380a38c6
3 changed files with 50 additions and 2 deletions
+4 -1
View File
@@ -1,4 +1,5 @@
import logging
from datetime import date
from typing import Any
from mcp.server.fastmcp import Context, FastMCP
@@ -83,7 +84,9 @@ def _raw_contact_to_model(raw: dict) -> Contact:
uid=raw["vcard_id"],
fn=contact_info.get("fullname", ""),
etag=raw.get("getetag"),
birthday=contact_info.get("birthday"),
birthday=contact_info["birthday"].isoformat()
if isinstance(contact_info.get("birthday"), date)
else contact_info.get("birthday"),
emails=emails,
phones=phones,
custom_fields=custom_fields,