Releases: taylorwilsdon/google_workspace_mcp
v1.0.5
Release v1.0.5
v1.0.4 - Support Comments Everywhere, env var for single user declared email
Adds support for comment retrieval, response and resolution in Google Docs, Sheets, Slides and Drive
USER_GOOGLE_EMAIL: Optional default email for authentication flows. If set, the LLM won't need to specify your email when callingstart_google_auth.
v1.0.3
Key Changes:
-
Environment Variable Configuration:
- You can now configure the server using
GOOGLE_OAUTH_CLIENT_IDandGOOGLE_OAUTH_CLIENT_SECRETenvironment variables. - The credential loading priority is:
- Environment Variables
GOOGLE_CLIENT_SECRETSpathclient_secret.jsonin the root directory.
- You can now configure the server using
-
Updated Authentication Flow:
- A new function
auth/google_auth.py:88was added to load secrets from the environment. - The
create_oauth_flow()function inauth/google_auth.pynow centralizes OAuth flow creation, prioritizing environment variables over file-based configuration. - Functions
start_auth_flow()andhandle_auth_callback()were refactored to use this new flow.
- A new function
-
Improved Error Handling & Logging:
- Enhanced error messages in
core/server.pyandauth/oauth_callback_server.pyto guide users on setting up credentials if they are missing. - Added logging to indicate whether credentials were loaded from environment variables or a file.
- Enhanced error messages in
Feature: Google Docs Comment Management
This PR adds comprehensive comment management functionality to the Google Workspace MCP server.
New Tools Added:
- `read_doc_comments` - Read all comments and replies from a Google Doc
- `reply_to_comment` - Reply to specific comments in documents
- `create_doc_comment` - Create new comments on documents
- `resolve_comment` - Mark comments as resolved
Google Workspace MCP v1.0.2
Release Notes
This release introduces several enhancements, new features, and a refac for improved stability and developer experience. The highlight of this release is the introduction of centralized error handling and the ability to add attachments to calendar events.
✨ Shoutout to @nacholupotti, @georgebashi & @telenieko for their contributions!
Highlights
- Centralized Error Handling: A new
@handle_http_errorsdecorator has been implemented incore/utils.py:154and applied to all Google API tools. This removes repetitivetry/exceptblocks, standardizes API error responses, and improves overall code robustness. - Event Attachments in Google Calendar: The
create_eventtool in Google Calendar now supports adding attachments from Google Drive. You can provide file URLs or file IDs to attach documents, spreadsheets, and other files directly to your events. - Create Drive Files from URL: The
create_drive_filetool can now fetch content from a public URL and upload it directly to Google Drive, simplifying the process of saving web content.
🚀 New Features
- Google Calendar:
- Added a new
get_eventtool to fetch the detailed information of a single calendar event by its ID.
- Added a new
- Google Drive:
- The
create_drive_filetool now accepts afileUrlparameter to create a file from a web URL.
- The
🛠️ Improvements & Refactoring
- Core Authentication:
- The
@require_google_servicedecorator has been significantly refactored for better integration with FastMCP. It now dynamically inspects function signatures to inject the Google service object, making the tool definitions cleaner and more maintainable.
- The
- Google Calendar:
- The
get_eventstool now includes the event's end time in its output for more detailed event summaries.
- The
- Error Handling:
- All tools across all services (Calendar, Chat, Docs, Drive, Forms, Gmail, Sheets, Slides) now use the new
@handle_http_errorsdecorator, replacing localtry/exceptblocks forHttpError.
- All tools across all services (Calendar, Chat, Docs, Drive, Forms, Gmail, Sheets, Slides) now use the new
- Console Output:
- The main server script
main.py:45now uses asafe_printfunction to preventUnicodeEncodeErrorcrashes, ensuring server stability with non-ASCII characters in logs or metadata.
- The main server script
📝 Documentation
- Project descriptions in
README.md:15have been updated for clarity. - Added instructions on using the
GOOGLE_CLIENT_SECRETSenvironment variable for customclient_secret.jsonlocations inREADME.md:26.
📦 Dependencies
- Added
pyjwt>=2.10.1to the project dependencies inpyproject.toml:4182.
v1.0.1
Release v1.0.1, update readme
What's Changed
- Release 1.0.0 by @taylorwilsdon in #59
Full Changelog: v1.0.0...v1.0.1
v1.0.0
📦 Release v1.0.0 – Streamable-HTTP & Single-User Edition
(package name 302 google-workspace-mcp, now workspace-mcp due to pypi name conflict)
A major overhaul that graduates the project from PoC to a production-ready MCP server with first-class Streamable-HTTP support, richer Google Workspace coverage, and a revamped developer experience.
🔧 Expanded Toolset (v1.0.0)
| Service | Icon | Key Capabilities |
|---|---|---|
| Google Sheets | 📊 | Read / write ranges, create spreadsheets, add sheets, batch updates, formatting helpers |
| Google Slides | 🖼️ | Create presentations, insert slides, update text & images, export to PDF |
| Google Forms | 📝 | Create forms, get & list responses, adjust publish / auth settings |
| Google Chat | 💬 | List spaces, fetch messages, send or search chat history |
All new modules live under
g{service}/(e.g.gsheets/sheets_tools.py) and are auto-registered when you start the server withworkspace-mcp --tools sheets slides forms chat
🚀 Highlights
| Area | What’s New |
|---|---|
| Transport Layer | Supports everything, Stdio, Streamable-HTTP is now a first-class citizen (SSE fallback kept). Unified CLI flag --transport [stdio|streamable-http]. |
| Docker | Completely rebuilt Dockerfile• Debian Slim base → smaller image• System deps & uv pre-installed for blazing-fast lockfile installs• Health-checks, non-root user, debug hooks |
| Auth | New transport-aware OAuth callback server• Works in both stdio & HTTP modes• Centralised HTML success/error templates• auth/google_auth.py refactor → cleaner caching, PKCE refresh, single-user shortcut |
| Single-User Mode | --single-user (or MCP_SINGLE_USER_MODE=1) lets you bypass per-session state and reuse any creds in .credentials/. Perfect for desktop assistants. |
| Tooling | install_claude.py one-liner auto-wires the server into Claude Desktop. |
| CLI & Logging | Rich argparse interface, coloured startup banner, credential-directory pre-flight, file + console logging split by level. |
| Docs | README completely rewritten: clearer quick-start, animated demo, new badges, expanded tool matrix (Calendar, Drive, Gmail, Docs, Sheets, Slides, Forms, Chat). |
| Packaging | • Package renamed to workspace-mcp • Version bumped to 1.0.0 • workspace-mcp entry-point script • pyproject.toml now PEP 621 + curated classifiers |
| Cleanup | Removed legacy auth/oauth_manager.py; many files reorganised for clarity. |
💥 Breaking Changes
-
Package rename
pip uninstall google-workspace-mcp pip install workspace-mcp==1.0.0 -
Entry-point
# old uv run main.py # new workspace-mcp [flags] -
CLI flags changed (
--transport,--single-user,--tools …). -
OAuth redirect URI remains
http://localhost:8000/oauth2callback, but stdio mode now spins up a minimal FastAPI server automatically—remove your oldoauth_callback_serverwork-arounds. -
Docker users: rebuild with
docker build -t workspace-mcp:1.0 .(old image tags won’t work).
See Migration Guide below for one-liner updates.
📝 Detailed Changelog — v1.0.0
➕ Added
| File / Feature | Purpose |
|---|---|
| auth/oauth_callback_server.py | Lightweight HTTP callback server for OAuth when running in stdio mode. |
| auth/oauth_responses.py | Re-usable HTML templates for OAuth success / error pages. |
| install_claude.py | One-command installer that wires the server into Claude Desktop. |
| New CLI flags | --single-user, --transport, --tools for fine-grained startup control. |
| Docker | Health-check endpoint, non-root user, and credential-directory safety check. |
➖ Removed
-
auth/oauth_manager.py— logic merged into the new auth modules.
🛠️ Migration Guide
# 1 — Upgrade package pip install -U workspace-mcp2 — (If using Docker) rebuild image
docker build -t workspace-mcp:1.0 .
3 — Use the new entry-point
workspace-mcp --transport streamable-http # or omit flag for stdio
4 — (Optional) Single-user desktop mode
export MCP_SINGLE_USER_MODE=1
5 — (Re)generate uv.lock if you track lockfiles
uv lock # first-time create
uv lock --upgrade # refresh to latest allowed versions
🔒 Security Notes
-
Credentials now include
expirytimestamps; stale refresh tokens trigger re-auth gracefully. -
.credentials/directory check prevents container failures due to volume-permission mismatches. -
OAuth callback still defaults to HTTP on localhost—remember to switch to HTTPS in production.
🙏 Acknowledgements
Huge thanks to everyone who provided early feedback, especially testing Streamable-HTTP convergence with Claude Desktop.
Happy building!
— @taylorwilsdon / workspace-mcp team
0.1.0
What's Changed
- enh: OAuth Handling & Tool Registry by @taylorwilsdon in #1
- enh: Refactor authentication flow to simplify, implement file based logging by @taylorwilsdon in #2
- enh: Modernize MCP Server with Streamable HTTP, FastAPI Integration, and Enhanced OAuth Flow by @taylorwilsdon in #4
- enh: MCP response payload format improvements, OAuth flow handling improvements, refac: docs & error logging by @taylorwilsdon in #3
- feat: Add Support for Google Drive and Gmail Operations by @taylorwilsdon in #5
- refac: oauth / authentication by @taylorwilsdon in #6
- Update README.md by @taylorwilsdon in #7
- Update README.md by @taylorwilsdon in #8
- feat: Google Docs support by @taylorwilsdon in #9
- Update README.md by @taylorwilsdon in #10
- Update README.md by @taylorwilsdon in #11
- Update calendar_tools.py by @taylorwilsdon in #13
- feat: Google Calendar Modify + Delete actions by @taylorwilsdon in #14
- fix: helper function for auth, fix indent by @taylorwilsdon in #15
New Contributors
- @taylorwilsdon made their first contribution in #1
Full Changelog: https://github.com/taylorwilsdon/google_workspace_mcp/commits/0.1.0