Commit Graph

1594 Commits

Author SHA1 Message Date
Taylor Wilsdon
a7a10deb78 ruff 2026-03-16 10:44:33 -04:00
Taylor Wilsdon
b0784b798c Merge pull request #582 from vdemay/fix/stateless-http-mode
Fix: wire WORKSPACE_MCP_STATELESS_MODE to FastMCP's stateless_http parameter
2026-03-16 10:44:12 -04:00
Taylor Wilsdon
b10f6a970a Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into fix/stateless-http-mode 2026-03-16 10:43:17 -04:00
Taylor Wilsdon
7d267a727b Merge pull request #560 from hindmakarem-qa/fix/email-threading-headers
fix: #457 llm will add rfp compliant id when replying
2026-03-16 09:54:28 -04:00
Vincent Demay
f163ffbd30 Fix: wire WORKSPACE_MCP_STATELESS_MODE to FastMCP's stateless_http parameter
WORKSPACE_MCP_STATELESS_MODE=true was already read, validated, and used to
configure the OAuth layer — but was never passed to server.run(). FastMCP
therefore always ran in stateful mode, keeping session state in memory.

On pod/process restart all in-memory sessions are lost, causing clients to
receive {"code":-32600,"message":"Session not found"} on their next request.

Passes stateless_http=is_stateless_mode() to server.run() so FastMCP drops
session tracking when stateless mode is configured, matching what the env var
already advertises.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 12:47:51 +01:00
Taylor Wilsdon
ee6fd7c0f7 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into fix/email-threading-headers 2026-03-15 18:19:09 -04:00
Taylor Wilsdon
3c6978840f refac 2026-03-15 18:19:07 -04:00
Taylor Wilsdon
7fe01c1b86 Merge pull request #580 from Bortlesboat/feat/517-cell-notes
feat(sheets): expose cell notes in read_sheet_values
2026-03-15 17:53:43 -04:00
Taylor Wilsdon
ba3db90a62 refac 2026-03-15 17:52:45 -04:00
Taylor Wilsdon
bf1f94b330 refac 2026-03-15 17:52:13 -04:00
Taylor Wilsdon
042d2190e9 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into feat/517-cell-notes 2026-03-15 17:35:22 -04:00
Taylor Wilsdon
4f6b35b218 Merge pull request #579 from Bortlesboat/fix/561-token-auto-refresh
fix(auth): auto-refresh expired tokens in single-user stdio mode
2026-03-15 17:34:18 -04:00
Bortlesboat
2e0d6393f4 feat(sheets): expose cell notes in read_sheet_values 2026-03-15 17:33:02 -04:00
Taylor Wilsdon
94b37de421 ruff 2026-03-15 17:29:20 -04:00
Taylor Wilsdon
6a386b4255 refac 2026-03-15 17:29:09 -04:00
Bortlesboat
b7365c661e fix(auth): auto-refresh expired tokens in single-user stdio mode
When credentials had a refresh_token but credentials.expired was False
(e.g., token=None with no stored expiry), the refresh was skipped and
the server would start a new OAuth flow instead. This changes the
condition to attempt refresh whenever credentials are not valid and a
refresh_token is available, regardless of the expired flag.
2026-03-15 17:22:36 -04:00
Taylor Wilsdon
92b4a7847f chore: release v1.14.3 2026-03-15 12:16:30 -04:00
Taylor Wilsdon
fbf53d2dcc Merge pull request #564 from reinlemmens/feature/batch-bullet-list-support
Add create_bullet_list operation to batch_update_doc
2026-03-13 11:30:28 -04:00
Rein Lemmens
a9db471345 Add create_bullet_list operation to batch_update_doc
Exposes native Google Docs createParagraphBullets and
deleteParagraphBullets APIs via the batch operation manager.
Supports UNORDERED (bullets), ORDERED (numbered), and NONE
(remove formatting) list types with optional nesting levels.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 21:06:34 +01:00
Rein Lemmens
38ad39bea6 Add named_style_type support to update_paragraph_style operation
Allows setting TITLE and SUBTITLE paragraph styles directly, in addition
to the existing heading_level (0-6) parameter. The new named_style_type
parameter accepts all Google Docs named styles: NORMAL_TEXT, TITLE,
SUBTITLE, HEADING_1 through HEADING_6.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 20:34:36 +01:00
hindmakarem-qa
4d79bf2817 fix: #457 llm will add rfp compliant id when replying 2026-03-12 02:30:34 +01:00
Taylor Wilsdon
5a2e1f3089 Merge pull request #553 from taylorwilsdon/issues/545
enh: expand get_form schema
2026-03-10 11:50:18 -04:00
Taylor Wilsdon
aa75b3f2dd pr feedback 2026-03-10 11:45:24 -04:00
Taylor Wilsdon
6e6c97baa7 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into issues/545 2026-03-10 11:40:12 -04:00
Taylor Wilsdon
37930346f6 Merge pull request #554 from taylorwilsdon/issues/552
fix: Issues/552 - Docker [disk] storage
2026-03-09 14:34:31 -04:00
github-actions[bot]
5eb5e06a1e style: auto-fix ruff lint and format 2026-03-09 16:52:41 +00:00
Taylor Wilsdon
7c550e55b2 declarative dockerfile 2026-03-09 12:52:00 -04:00
Taylor Wilsdon
d3fde86296 docker py-key-value-aio[disk] 2026-03-09 12:47:40 -04:00
github-actions[bot]
dd547c931a style: auto-fix ruff lint and format 2026-03-09 16:20:51 +00:00
Taylor Wilsdon
ea078623b3 add 2026-03-09 12:20:04 -04:00
Taylor Wilsdon
6a2633984a Fix grammatical error in README description
Corrected a minor grammatical error in the README.
2026-03-06 11:45:54 -05:00
Taylor Wilsdon
4001e3f868 Refine README content for clarity and detail
Updated the README to enhance the description of features and capabilities, including details about OAuth 2.1 support and hosting options.
2026-03-06 11:45:39 -05:00
Taylor Wilsdon
dc4cefc17c Merge pull request #540 from mickey-mikey/feat/tasks-manage-permission
feat: add tasks:manage permission level
2026-03-05 08:54:43 -05:00
Taylor Wilsdon
c7b0afa74c readme cleanup 2026-03-05 08:52:48 -05:00
Taylor Wilsdon
bf2eb4c0c7 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feat/tasks-manage-permission 2026-03-05 08:47:35 -05:00
Taylor Wilsdon
f80f12cb54 Update README.md 2026-03-05 08:04:20 -05:00
mickey-mikey
f26c2f9e87 Merge branch 'taylorwilsdon:main' into feat/tasks-manage-permission 2026-03-05 15:13:08 +11:00
Taylor Wilsdon
c1204815cd Merge pull request #541 from taylorwilsdon/issues/511
fix: only suggest re-authentication for auth-related HTTP errors
2026-03-04 16:38:23 -05:00
Taylor Wilsdon
4cc456602f drive scope fix 2026-03-04 16:36:34 -05:00
github-actions[bot]
3faeb6d832 style: auto-fix ruff lint and format 2026-03-04 14:32:13 +00:00
Taylor Wilsdon
9de1fcb6ea fix: only suggest re-authentication for auth-related HTTP errors
When an HttpError occurs in Google Tasks tools, the error handler now checks
the HTTP status code before suggesting re-authentication. Re-auth messages are
only shown for 401 (Unauthorized) and 403 (Forbidden) errors.

This prevents misleading re-authentication suggestions for non-auth errors like
400 (Bad Request) with malformed arguments, allowing the LLM to focus on the
actual root cause instead of being misdirected by incorrect auth guidance.

The fix applies to both CLI mode (stdio legacy oauth) and MCP mode (OAuth 2.1).

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-04 09:30:59 -05:00
mickey-mikey
0e7c2a2318 refactor: move test_tasks_manage_is_valid_level to TestParsePermissionsArg
Addresses CodeRabbit Review 4 nitpick: the test validates
parse_permissions_arg() so it belongs with that test class.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 16:47:29 +11:00
mickey-mikey
acc3e665d0 fix: assert cumulative readonly scope in tasks full-level test
Addresses CodeRabbit Review 3 nitpick: verify TASKS_READONLY_SCOPE is
present at full level, confirming cumulative scope expansion.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 16:40:50 +11:00
mickey-mikey
69dd5069dc fix: add test docstrings and reset fixture per CodeRabbit review
- Add docstrings to test methods for coverage threshold
- Add autouse fixture to reset permission state between tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 16:29:28 +11:00
mickey-mikey
0fce7c78b6 fix: also deny clear_completed under tasks:manage
Addresses CodeRabbit review — clear_completed is destructive and should
be blocked alongside delete at the manage permission level.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 16:21:51 +11:00
mickey-mikey
377791080c feat: add tasks:manage permission level to deny delete without blocking other writes
The consolidated manage_task tool bundles create/update/delete/move into a
single tool, making it impossible to deny just the delete action via tool
tiers or scope-based filtering.

This adds:
- A `manage` permission level for tasks (between readonly and full)
- A SERVICE_DENIED_ACTIONS registry mapping (service, level) to denied actions
- An is_action_denied() helper that tools call before executing actions
- Guards in manage_task and manage_task_list that reject denied actions

Usage: --permissions tasks:manage
Allows create, update, move. Denies delete.
tasks:full remains unchanged (all actions allowed).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 15:04:31 +11:00
Taylor Wilsdon
89e1974984 chore: release v1.14.2 2026-03-03 18:19:07 -05:00
Taylor Wilsdon
130ed48cc7 Merge pull request #423 from gpminsuk/feat/server-instructions-user-email
feat: Add USER_GOOGLE_EMAIL to server instructions for single-user mode
2026-03-03 17:54:12 -05:00
Taylor Wilsdon
0f941650bb Merge pull request #539 from slowpoison/feature_doc_tab
Add support for GDoc Tabs
2026-03-03 17:47:45 -05:00
Taylor Wilsdon
3d7fc02e84 refac for the better 2026-03-03 17:46:50 -05:00