github taylorwilsdon/google_workspace_mcp v1.25.0

3 hours ago

Release v1.25.0

Large Drive downloads no longer buffer in RAM, stored attachments stop surviving forever across restarts, calendar event times carry an unambiguous weekday, and tools now accept camelCase argument names from clients that mirror Google's API field names.

What's Changed

  • enh(gdrive/gmail/core): stream Drive downloads to a temp file in 8 MB chunks and adopt them into attachment storage with the new save_attachment_from_path() (a shutil.move, so it stays memory-safe across filesystems) instead of buffering the whole payload. A multi-gigabyte download now costs one chunk of RAM rather than a full copy (#994). Stored files also keep the full UUID in their name, closing a case where a truncated 8-char prefix let two attachments silently overwrite each other, and HTML sends now build their text/plain alternative with html_to_text_preserving_breaks() so non-HTML clients see real paragraph breaks instead of First paragraph.Second paragraph. by @taylorwilsdon in #1022
  • fix(attachments): sweep the storage directory by file mtime, on get_attachment_storage() and as part of cleanup_expired(), so attachments written before a restart actually expire. Expiry previously lived only in the in-memory metadata dict, which meant a restart orphaned every file already on disk with nothing left to ever delete it by @justadityaraj in #1028
  • fix(calendar): annotate get_events start/end boundaries with the offset-local weekday (2026-08-18T09:00:00-04:00 [weekday: Tuesday; ISO weekday: 2]) and mark all-day ends as exclusive, so a model reading the response stops deriving the wrong day from a raw RFC 3339 string. Values that don't match RFC 3339 (or Google's all-day YYYY-MM-DD) pass through untouched by @TheMachineAiden in #1025
  • fix(core): add CamelCaseArgumentsMiddleware, which renames camelCase tool arguments (calendarId, timeMin, maxResults, ...) onto their snake_case parameters. Every tool declares additionalProperties: false, so callers echoing Google's field names used to fail schema validation before the request ever reached Google (#918). A key is only renamed when it isn't itself a declared parameter, its snake_case form is, and the caller didn't also pass the snake_case key, so existing callers and genuinely invalid arguments behave exactly as before by @Bortlesboat in #921

New Contributors

Full Changelog: v1.24.1...v1.25.0

Don't miss a new google_workspace_mcp release

NewReleases is sending notifications on new releases.