Highlights
v1.15.0 is a quality-of-life release with real improvements across auth reliability, Gmail reply behavior, and day-to-day Workspace tooling. The big theme is fewer "almost works" edges: reply drafts thread correctly, quoted replies render more naturally, OAuth flow improvements, and more of the metadata real world users actually care about now shows up in tool output.
Authentication, Runtime, and Deployment
- Single-user
stdiosessions now refresh invalid cached credentials whenever a refresh token is available, instead of bouncing users back into OAuth just because the token was invalid but not explicitly marked expired. This closes a frustrating reauth loop for long-lived local setups. (#579) by @Bortlesboat WORKSPACE_MCP_STATELESS_MODE=truenow actually reaches FastMCP'sstateless_httpruntime flag. Before this, the app advertised stateless behavior while FastMCP still kept in-memory sessions, which could break clients after a pod or process restart. (#582) by @vdemay- Re-auth flows now choose
select_accountwhen the user already has the required scopes, instead of forcing an unnecessary consent prompt. The callback path also preserves an existing refresh token when Google omits it on reauth, which makes repeat auth materially less fragile. (#586) by @taylorwilsdon - macOS startup now captures stray stdout during module initialization and replays it to stderr so the MCP JSON-RPC handshake is not corrupted by platform strings or other unexpected startup noise. (#577) by @Bortlesboat
- OAuth callback handling is more robust in two places: the browser response pages now degrade cleanly when
window.close()is blocked, and the stdio auth flow now checks that the callback server is actually listening before sending users through Google auth. (#573, #572) by @seidnerj - External OAuth mode documentation was tightened up to reflect the current runtime behavior more clearly, which should reduce setup mistakes for deployments using an external identity layer. (#599) by @taylorwilsdon
- Dependency maintenance in this release updates
authlibfrom1.6.7to1.6.9andpyasn1from0.6.2to0.6.3. (#583, #587) by @dependabot
Gmail Reply Quality
- Reply drafts can now auto-populate
In-Reply-ToandReferencesfrom the Gmail thread when only athread_idis provided. In practice, this fixes the classic "draft exists but does not render inline in the conversation" problem. (#578) by @Bortlesboat - Reply drafts can optionally include quoted original content, and the implementation deliberately puts the Gmail signature above the quoted block so the result looks like a native human reply instead of an awkward append-only transcript. Both HTML and plaintext paths are covered. (#581) by @Bortlesboat
- Gmail reply handling is also stricter about RFC-style threading identifiers and now exposes
In-Reply-To/Referencesmetadata more consistently, which helps keep agent-generated replies standards-compliant and easier to debug. (#560) by @hindmakarem-qa
Workspace Tooling Improvements
read_sheet_valuescan now include cell notes, not just raw values. That is especially useful for operational sheets where the real instructions live in comments/notes rather than the visible cells. The implementation also keeps metadata fetches bounded to the tight populated range instead of blindly expanding grid reads. (#580) by @Bortlesboat- Google Docs paragraph styling now explicitly supports
TITLEandSUBTITLE, and validation now rejects conflictingheading_levelplusnamed_style_typecombinations instead of trying to guess intent. (#563) by @reinlemmens - Docs text formatting now supports
strikethroughin bothmodify_doc_textandbatch_update_doc, which fills in a pretty obvious gap beside bold, italic, and underline. (#575) by @gkatz2 - Calendar event output now surfaces extracted meeting URLs from
conferenceDataandhangoutLink, so users can actually see Google Meet or third-party video links directly in tool output. (#565) by @reinlemmens - Google Chat reads are more queryable:
get_messagesnow exposes API filters, andsearch_messagescan combine free-text matching withcreateTimefilters while capping cross-space scans to stay practical. (#594) by @taylorwilsdon
New Contributors
As always, a huge thanks to our contributors especially @Bortlesboat coming in on a hot streak and getting like 5 PRs merged!
- @Bortlesboat made their first contribution in #579
- @hindmakarem-qa made their first contribution in #560
- @vdemay made their first contribution in #582
- @seidnerj made their first contribution in #573
- @gkatz2 made their first contribution in #575
Thanks to everyone who contributed code, reviews, and polish to this release.
Full Changelog: v1.14.3...v1.15.0