workspace-mcp 1.1.3__py3-none-any.whl → 1.1.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
main.py CHANGED
@@ -40,7 +40,7 @@ def safe_print(text):
40
40
  # Running as MCP server, suppress output to avoid JSON parsing errors
41
41
  logger.debug(f"[MCP Server] {text}")
42
42
  return
43
-
43
+
44
44
  try:
45
45
  print(text, file=sys.stderr)
46
46
  except UnicodeEncodeError:
@@ -56,7 +56,7 @@ def main():
56
56
  parser.add_argument('--single-user', action='store_true',
57
57
  help='Run in single-user mode - bypass session mapping and use any credentials from the credentials directory')
58
58
  parser.add_argument('--tools', nargs='*',
59
- choices=['gmail', 'drive', 'calendar', 'docs', 'sheets', 'chat', 'forms', 'slides'],
59
+ choices=['gmail', 'drive', 'calendar', 'docs', 'sheets', 'chat', 'forms', 'slides', 'tasks'],
60
60
  help='Specify which tools to register. If not provided, all tools are registered.')
61
61
  parser.add_argument('--transport', choices=['stdio', 'streamable-http'], default='stdio',
62
62
  help='Transport mode: stdio (default) or streamable-http')
@@ -91,7 +91,8 @@ def main():
91
91
  'sheets': lambda: __import__('gsheets.sheets_tools'),
92
92
  'chat': lambda: __import__('gchat.chat_tools'),
93
93
  'forms': lambda: __import__('gforms.forms_tools'),
94
- 'slides': lambda: __import__('gslides.slides_tools')
94
+ 'slides': lambda: __import__('gslides.slides_tools'),
95
+ 'tasks': lambda: __import__('gtasks.tasks_tools')
95
96
  }
96
97
 
97
98
  tool_icons = {
@@ -102,7 +103,8 @@ def main():
102
103
  'sheets': '📊',
103
104
  'chat': '💬',
104
105
  'forms': '📝',
105
- 'slides': '🖼️'
106
+ 'slides': '🖼️',
107
+ 'tasks': '✓'
106
108
  }
107
109
 
108
110
  # Import specified tools or all tools if none specified
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: workspace-mcp
3
- Version: 1.1.3
3
+ Version: 1.1.5
4
4
  Summary: Comprehensive, highly performant Google Workspace Streamable HTTP & SSE MCP Server for Calendar, Gmail, Docs, Sheets, Slides & Drive
5
5
  Author-email: Taylor Wilsdon <taylor@taylorwilsdon.com>
6
6
  License: MIT
@@ -53,7 +53,9 @@ Dynamic: license-file
53
53
 
54
54
  **This is the single most feature-complete Google Workspace MCP server**
55
55
 
56
- *Full natural language control over Google Calendar, Drive, Gmail, Docs, Sheets, Slides, Forms, and Chat through all MCP clients, AI assistants and developer tools*
56
+ *Full natural language control over Google Calendar, Drive, Gmail, Docs, Sheets, Slides, Forms, Tasks, and Chat through all MCP clients, AI assistants and developer tools.*
57
+
58
+ ###### Support for all free Google accounts (Gmail, Docs, Drive etc) & Google Workspace plans (Starter, Standard, Plus, Enterprise, Non Profit etc) with their expanded app options like Chat & Spaces.
57
59
 
58
60
  </div>
59
61
 
@@ -77,19 +79,21 @@ Dynamic: license-file
77
79
  ---
78
80
 
79
81
  ### A quick plug for AI-Enhanced Docs
82
+ <details>
83
+ <summary>But why?</summary>
80
84
 
81
- > **This README was crafted with AI assistance, and here's why that matters**
85
+ **This README was written with AI assistance, and here's why that matters**
82
86
  >
83
- > As a solo developer building open source tools that may only ever serve my own needs, comprehensive documentation often wouldn't happen without AI help. Using agentic dev tools like **Roo** & **Claude Code** that understand the entire codebase, AI doesn't just regurgitate generic content - it extracts real implementation details and creates accurate, specific documentation.
87
+ > As a solo dev building open source tools that many never see outside use, comprehensive documentation often wouldn't happen without AI help. Using agentic dev tools like **Roo** & **Claude Code** that understand the entire codebase, AI doesn't just regurgitate generic content - it extracts real implementation details and creates accurate, specific documentation.
84
88
  >
85
- > In this case, Sonnet 4 took a pass & a human (me) verified them 6/28/25.
86
-
89
+ > In this case, Sonnet 4 took a pass & a human (me) verified them 7/10/25.
90
+ </details>
87
91
 
88
- ## 🌐 Overview
92
+ ## Overview
89
93
 
90
94
  A production-ready MCP server that integrates all major Google Workspace services with AI assistants. Built with FastMCP for optimal performance, featuring advanced authentication handling, service caching, and streamlined development patterns.
91
95
 
92
- ## Features
96
+ ## Features
93
97
 
94
98
  - **🔐 Advanced OAuth 2.0**: Secure authentication with automatic token refresh, transport-aware callback handling, session management, and centralized scope management
95
99
  - **📅 Google Calendar**: Full calendar management with event CRUD operations
@@ -99,8 +103,9 @@ A production-ready MCP server that integrates all major Google Workspace service
99
103
  - **📊 Google Sheets**: Comprehensive spreadsheet management with flexible cell operations and comment management
100
104
  - **🖼️ Google Slides**: Presentation management with slide creation, updates, content manipulation, and comment management
101
105
  - **📝 Google Forms**: Form creation, retrieval, publish settings, and response management
106
+ - **✓ Google Tasks**: Complete task and task list management with hierarchy, due dates, and status tracking
102
107
  - **💬 Google Chat**: Space management and messaging capabilities
103
- - **🔄 Multiple Transports**: HTTP with SSE fallback, OpenAPI compatibility via `mcpo`
108
+ - **🔄 All Transports**: Stdio, Streamable HTTP & SSE, OpenAPI compatibility via `mcpo`
104
109
  - **⚡ High Performance**: Service caching, thread-safe sessions, FastMCP integration
105
110
  - **🧩 Developer Friendly**: Minimal boilerplate, automatic service injection, centralized configuration
106
111
 
@@ -108,7 +113,45 @@ A production-ready MCP server that integrates all major Google Workspace service
108
113
 
109
114
  ## 🚀 Quick Start
110
115
 
111
- ### Simplest Start (uvx - Recommended)
116
+ ### 1. One-Click Claude Desktop Install (Recommended)
117
+
118
+ 1. **Download:** Grab the latest `google_workspace_mcp.dxt` from the “Releases” page
119
+ 2. **Install:** Double-click the file – Claude Desktop opens and prompts you to **Install**
120
+ 3. **Configure:** In Claude Desktop → **Settings → Extensions → Google Workspace MCP**, paste your Google OAuth credentials
121
+ 4. **Use it:** Start a new Claude chat and call any Google Workspace tool 🎉
122
+
123
+ >
124
+ **Why DXT?**
125
+ > Desktop Extensions (`.dxt`) bundle the server, dependencies, and manifest so users go from download → working MCP in **three clicks** – no terminal, no JSON editing, no version conflicts.
126
+
127
+ #### Required Configuration
128
+ <details>
129
+ <summary>Environment - you will configure these in Claude itself, see screenshot:</summary>
130
+ | Variable | Purpose |
131
+ |----------|---------|
132
+ | `GOOGLE_OAUTH_CLIENT_ID` | OAuth client ID from Google Cloud |
133
+ | `GOOGLE_OAUTH_CLIENT_SECRET` | OAuth client secret |
134
+ | `USER_GOOGLE_EMAIL` *(optional)* | Default email for single-user auth |
135
+ | `OAUTHLIB_INSECURE_TRANSPORT=1` | Development only (allows `http://` redirect) |
136
+
137
+ Claude Desktop stores these securely in the OS keychain; set them once in the extension pane.
138
+ </details>
139
+ Screenshot here
140
+
141
+ ---
142
+
143
+ ### 2. Advanced / Cross-Platform Installation
144
+
145
+ If you’re developing, deploying to servers, or using another MCP-capable client, keep reading.
146
+
147
+ #### Instant CLI (uvx)
148
+
149
+ ```bash
150
+ # Requires Python 3.11+ and uvx
151
+ export GOOGLE_OAUTH_CLIENT_ID="xxx"
152
+ export GOOGLE_OAUTH_CLIENT_SECRET="yyy"
153
+ uvx workspace-mcp --tools gmail drive calendar
154
+ ```
112
155
 
113
156
  > Run instantly without manual installation - you must configure OAuth credentials when using uvx. You can use either environment variables (recommended for production) or set the `GOOGLE_CLIENT_SECRET_PATH` (or legacy `GOOGLE_CLIENT_SECRETS`) environment variable to point to your `client_secret.json` file.
114
157
 
@@ -121,7 +164,7 @@ export GOOGLE_OAUTH_CLIENT_SECRET="your-client-secret"
121
164
  uvx workspace-mcp
122
165
 
123
166
  # Start with specific tools only
124
- uvx workspace-mcp --tools gmail drive calendar
167
+ uvx workspace-mcp --tools gmail drive calendar tasks
125
168
 
126
169
  # Start in HTTP mode for debugging
127
170
  uvx workspace-mcp --transport streamable-http
@@ -149,7 +192,7 @@ uv run main.py
149
192
 
150
193
  1. **Google Cloud Setup**:
151
194
  - Create OAuth 2.0 credentials (web application) in [Google Cloud Console](https://console.cloud.google.com/)
152
- - Enable APIs: Calendar, Drive, Gmail, Docs, Sheets, Slides, Forms, Chat
195
+ - Enable APIs: Calendar, Drive, Gmail, Docs, Sheets, Slides, Forms, Tasks, Chat
153
196
  - Add redirect URI: `http://localhost:8000/oauth2callback`
154
197
  - Configure credentials using one of these methods:
155
198
 
@@ -184,9 +227,10 @@ uv run main.py
184
227
 
185
228
  3. **Server Configuration**:
186
229
  The server's base URL and port can be customized using environment variables:
187
- - `WORKSPACE_MCP_BASE_URI`: Sets the base URI for the server (default: http://localhost). This affects the server_url used for Gemini native function calling and the OAUTH_REDIRECT_URI.
230
+ - `WORKSPACE_MCP_BASE_URI`: Sets the base URI for the server (default: http://localhost). This affects the `server_url` used to construct the default `OAUTH_REDIRECT_URI` if `GOOGLE_OAUTH_REDIRECT_URI` is not set.
188
231
  - `WORKSPACE_MCP_PORT`: Sets the port the server listens on (default: 8000). This affects the server_url, port, and OAUTH_REDIRECT_URI.
189
232
  - `USER_GOOGLE_EMAIL`: Optional default email for authentication flows. If set, the LLM won't need to specify your email when calling `start_google_auth`.
233
+ - `GOOGLE_OAUTH_REDIRECT_URI`: Sets an override for OAuth redirect specifically, must include a full address (i.e. include port if necessary). Use this if you want to run your OAuth redirect separately from the MCP. This is not recommended outside of very specific cases
190
234
 
191
235
  ### Start the Server
192
236
 
@@ -201,7 +245,7 @@ uv run main.py --transport streamable-http
201
245
  uv run main.py --single-user
202
246
 
203
247
  # Selective tool registration (only register specific tools)
204
- uv run main.py --tools gmail drive calendar
248
+ uv run main.py --tools gmail drive calendar tasks
205
249
  uv run main.py --tools sheets docs
206
250
  uv run main.py --single-user --tools gmail # Can combine with other flags
207
251
 
@@ -210,7 +254,7 @@ docker build -t workspace-mcp .
210
254
  docker run -p 8000:8000 -v $(pwd):/app workspace-mcp --transport streamable-http
211
255
  ```
212
256
 
213
- **Available Tools for `--tools` flag**: `gmail`, `drive`, `calendar`, `docs`, `sheets`, `forms`, `chat`
257
+ **Available Tools for `--tools` flag**: `gmail`, `drive`, `calendar`, `docs`, `sheets`, `forms`, `tasks`, `chat`
214
258
 
215
259
  ### Connect to Claude Desktop
216
260
 
@@ -218,7 +262,8 @@ The server supports two transport modes:
218
262
 
219
263
  #### Stdio Mode (Default - Recommended for Claude Desktop)
220
264
 
221
- **Easiest Setup (Recommended)**
265
+ **Guided Setup (Recommended if not using DXT)**
266
+
222
267
  ```bash
223
268
  python install_claude.py
224
269
  ```
@@ -254,7 +299,7 @@ After running the script, just restart Claude Desktop and you're ready to go.
254
299
 
255
300
  **Get Google OAuth Credentials** (if you don't have them):
256
301
  - Go to [Google Cloud Console](https://console.cloud.google.com/)
257
- - Create a new project and enable APIs: Calendar, Drive, Gmail, Docs, Sheets, Slides, Forms, Chat
302
+ - Create a new project and enable APIs: Calendar, Drive, Gmail, Docs, Sheets, Slides, Forms, Tasks, Chat
258
303
  - Create OAuth 2.0 Client ID (Web application) with redirect URI: `http://localhost:8000/oauth2callback`
259
304
 
260
305
  **Development Installation (For Contributors)**:
@@ -392,6 +437,23 @@ When calling a tool:
392
437
  | `get_form_response` | Get individual form response details |
393
438
  | `list_form_responses` | List all responses to a form with pagination |
394
439
 
440
+ ### ✓ Google Tasks ([`tasks_tools.py`](gtasks/tasks_tools.py))
441
+
442
+ | Tool | Description |
443
+ |------|-------------|
444
+ | `list_task_lists` | List all task lists with pagination support |
445
+ | `get_task_list` | Retrieve details of a specific task list |
446
+ | `create_task_list` | Create new task lists with custom titles |
447
+ | `update_task_list` | Modify existing task list titles |
448
+ | `delete_task_list` | Remove task lists and all contained tasks |
449
+ | `list_tasks` | List tasks in a specific list with filtering options |
450
+ | `get_task` | Retrieve detailed information about a specific task |
451
+ | `create_task` | Create new tasks with title, notes, due dates, and hierarchy |
452
+ | `update_task` | Modify task properties including title, notes, status, and due dates |
453
+ | `delete_task` | Remove tasks from task lists |
454
+ | `move_task` | Reposition tasks within lists or move between lists |
455
+ | `clear_completed_tasks` | Hide all completed tasks from a list |
456
+
395
457
  ### 💬 Google Chat ([`chat_tools.py`](gchat/chat_tools.py))
396
458
 
397
459
  | Tool | Description |
@@ -1,34 +1,36 @@
1
- main.py,sha256=2WLURMeCnoVws_OJOj2dm6yz7cegYJl5FqzYBFa2YOI,7513
1
+ main.py,sha256=a4w_AcD_nSJo9697-75tZ3sU0tqOP1J8xTrXXD7qmns,7601
2
2
  auth/__init__.py,sha256=gPCU3GE-SLy91S3D3CbX-XfKBm6hteK_VSPKx7yjT5s,42
3
- auth/google_auth.py,sha256=JiGrHFpzhuxQgUNumZtAbyl8HTisDVdnvVFeSqpkCfg,32939
4
- auth/oauth_callback_server.py,sha256=igrur3fkZSY0bawufrH4AN9fMNpobUdAUp1BG7AQC6w,9341
3
+ auth/google_auth.py,sha256=h0QIEthpZMxw7dEijYQ5ntXESg2FHNGkDneEjJkdCn4,32868
4
+ auth/oauth_callback_server.py,sha256=kcgufdYU3e3ncSNouqgGyIiIOfFCXiR6CiOS8pTYuNo,9837
5
5
  auth/oauth_responses.py,sha256=qbirSB4d7mBRKcJKqGLrJxRAPaLHqObf9t-VMAq6UKA,7020
6
- auth/scopes.py,sha256=kMRdFN0wLyipFkp7IitTHs-M6zhZD-oieVd7fylueBc,3320
7
- auth/service_decorator.py,sha256=h9bkG1O6U-p4_yT1KseBKJvueprKd4SVJe1Bj2VrdXA,15669
6
+ auth/scopes.py,sha256=v091tidkMnhB0pPWOr0O08mU_s9yxSwVZkpVOyvlSwY,3550
7
+ auth/service_decorator.py,sha256=8UfJnST6oi5Mci2YUdiIocn8--0oAEXm74VrGMroqzQ,15846
8
8
  core/__init__.py,sha256=AHVKdPl6v4lUFm2R-KuGuAgEmCyfxseMeLGtntMcqCs,43
9
9
  core/comments.py,sha256=vVfZYjH0kwqFyXcwvBx3m0Ko4WmfTJTkfD3dCQbucuc,11215
10
10
  core/context.py,sha256=zNgPXf9EO2EMs9sQkfKiywoy6sEOksVNgOrJMA_c30Y,768
11
- core/server.py,sha256=8A5_o6RCZ3hhsAiCszZhHiUJbVVrxJLspcvCiMmt27Q,9265
11
+ core/server.py,sha256=En_sV6Z19kWx8SO4KAnh8Qg5v2HYw8f9f_WJdEGMDSA,9301
12
12
  core/utils.py,sha256=sUNPhM0xh3tqgyCZxTcoje37Et-pbNJTksybTatDyho,10127
13
13
  gcalendar/__init__.py,sha256=D5fSdAwbeomoaj7XAdxSnIy-NVKNkpExs67175bOtfc,46
14
- gcalendar/calendar_tools.py,sha256=SIiSJRxG3G9KsScow0pYwew600_PdtFqlOo-y2vXQRo,22144
14
+ gcalendar/calendar_tools.py,sha256=DYbvwqfyFlRQTXIxqezie_2u_2PLGXczhofvkLmNhOU,22136
15
15
  gchat/__init__.py,sha256=XBjH4SbtULfZHgFCxk3moel5XqG599HCgZWl_veIncg,88
16
16
  gchat/chat_tools.py,sha256=cIeXBBxWkFCdQNJ23BkX8IoDho6J8ZcfLsPjctUWyfA,7274
17
17
  gdocs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- gdocs/docs_tools.py,sha256=gWPBXf2M_ucP9LasAW0JAlCFAwixlcbAFDGS62xspZ4,8482
18
+ gdocs/docs_tools.py,sha256=x7YfzDAgy3bRgZt0P9TfSF0HLP2Yp8SkCeRl7hAvEuc,8437
19
19
  gdrive/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  gdrive/drive_tools.py,sha256=l-6IpHTstRMKIY2CU4DFTTNfEQ5rVbafgwo8BrbJ9Bk,15257
21
21
  gforms/__init__.py,sha256=pL91XixrEp9YjpM-AYwONIEfeCP2OumkEG0Io5V4boE,37
22
- gforms/forms_tools.py,sha256=reJF3qw9WwW6-aCOkS2x5jVBvdRx4Za8onEZBC57RXk,9663
22
+ gforms/forms_tools.py,sha256=2kV2ZZTMCLcLdP9l-X6Ob9HRSYbPrYezKDc8lOwnRjU,9540
23
23
  gmail/__init__.py,sha256=l8PZ4_7Oet6ZE7tVu9oQ3-BaRAmI4YzAO86kf9uu6pU,60
24
- gmail/gmail_tools.py,sha256=UIcws__Akw0kxbasc9fYH7rkzDw_7L-LJU1LQU_p-sA,24754
24
+ gmail/gmail_tools.py,sha256=7Rbzh8MJ8UwfQ8Gmpu9fustv7vXZ2JWZ5b35Fe28D00,24709
25
25
  gsheets/__init__.py,sha256=jFfhD52w_EOVw6N5guf_dIc9eP2khW_eS9UAPJg_K3k,446
26
26
  gsheets/sheets_tools.py,sha256=TVlJ-jcIvJ_sJt8xO4-sBWIshb8rabJhjTmZfzHIJsU,11898
27
27
  gslides/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  gslides/slides_tools.py,sha256=wil3XRyUMzUbpBUMqis0CW5eRuwOrP0Lp7-6WbF4QVU,10117
29
- workspace_mcp-1.1.3.dist-info/licenses/LICENSE,sha256=bB8L7rIyRy5o-WHxGgvRuY8hUTzNu4h3DTkvyV8XFJo,1070
30
- workspace_mcp-1.1.3.dist-info/METADATA,sha256=Gi0UFOQxhtECNLOLcB3JufzpfKV3LPuB1rd3Bz016aE,20158
31
- workspace_mcp-1.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
32
- workspace_mcp-1.1.3.dist-info/entry_points.txt,sha256=kPiEfOTuf-ptDM0Rf2OlyrFudGW7hCZGg4MCn2Foxs4,44
33
- workspace_mcp-1.1.3.dist-info/top_level.txt,sha256=Y8mAkTitLNE2zZEJ-DbqR9R7Cs1V1MMf-UploVdOvlw,73
34
- workspace_mcp-1.1.3.dist-info/RECORD,,
29
+ gtasks/__init__.py,sha256=qwOWUzQbkYLSBrdhCqEkAWPH2lEOljk1mLtrlab9YZc,107
30
+ gtasks/tasks_tools.py,sha256=Gy_j1VTeaa4HD2HQe0U1QjG3dQrkijtPNe0dUq5mAZQ,26021
31
+ workspace_mcp-1.1.5.dist-info/licenses/LICENSE,sha256=bB8L7rIyRy5o-WHxGgvRuY8hUTzNu4h3DTkvyV8XFJo,1070
32
+ workspace_mcp-1.1.5.dist-info/METADATA,sha256=MYM6nexE1H11xoH07B_AVg3E8M5LeQ0n8LlD00W6e7U,23325
33
+ workspace_mcp-1.1.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
34
+ workspace_mcp-1.1.5.dist-info/entry_points.txt,sha256=kPiEfOTuf-ptDM0Rf2OlyrFudGW7hCZGg4MCn2Foxs4,44
35
+ workspace_mcp-1.1.5.dist-info/top_level.txt,sha256=uAg7uV2mETWYRw5g80XtO1lhxVO1sY6_IihNdG_4n24,80
36
+ workspace_mcp-1.1.5.dist-info/RECORD,,
@@ -8,4 +8,5 @@ gforms
8
8
  gmail
9
9
  gsheets
10
10
  gslides
11
+ gtasks
11
12
  main