Skip to content

Releases: csitte/mailwarden

v0.1.2 — reliable is:unread search

Choose a tag to compare

@csitte csitte released this 23 Jun 09:18

Fixed

  • search now re-verifies read-state/category predicates against each hit''s live labels. Gmail''s threads.list index silently drops is:unread in some operator combinations (e.g. category:updates is:unread -in:inbox returned read mail too). The query''s unambiguous predicates — is:unread/is:read, is:starred/is:unstarred, is:important, in:inbox/in:trash/in:spam, category:…, each with negation — are checked against the thread''s true labels and index false positives dropped. OR/parenthesised/braced queries disable the post-filter so boolean logic is untouched; label:NAME is not resolved here.

Changed

  • With a label post-filter active, search scans a full candidate page (≤100) and stops once maxResults threads genuinely match, so maxResults stays meaningful.

Added

  • Pure helpers deriveLabelFilters / threadMatchesFilters + 12 vitest cases (suite now 30 tests).

v0.1.1 — bug fixes + tests

Choose a tag to compare

@csitte csitte released this 23 Jun 09:18
5e956e5

Fixed

  • Attachment detection in search — fetch threads with full format (not metadata, which omits payload.parts, so detection always returned false).
  • Inline images no longer counted as attachmentscollectAttachments filters on Content-Disposition / Content-ID / X-Attachment-Id.
  • sweep_snoozed could miss threads when >100 shared a due date (pagination loss).
  • modify_labels resolves human-readable names → label ids (STARRED, ToDo, MCP/Snoozed); unknown names created (add) or skipped (remove).
  • Body decoding uses base64url — content with -/_ no longer corrupted.
  • Security: override uuid to ^11.1.1 (GHSA-w5hq-g745-h8pq); esbuild + vitest 4.1.9 bump.

Added

  • vitest test suite.

Changed

  • Refactor toward testability (pure collectBodies/collectAttachments/parseMessage, injectable API client).

v0.1.0 — initial release

Choose a tag to compare

@csitte csitte released this 23 Jun 09:18

Initial release of mailwarden — a native Gmail MCP server talking straight to the live Gmail API (no synced snapshot).

Added

  • Read/find: search, get_thread, list_labels
  • Mailbox actions: modify_labels, archive, mark_read, mark_unread, trash, untrash
  • download_attachment — save an attachment to a local path
  • Snooze (no native Gmail equivalent): snooze, unsnooze, list_snoozed, sweep_snoozed via dated MCP/Snoozed/<YYYY-MM-DD> labels; sweep on demand, mailwarden --sweep, or hourly with MAILWARDEN_AUTO_SWEEP=1
  • Transports: stdio (local) + Streamable HTTP (VPS / claude.ai connector); OAuth scope gmail.modify