Compare commits

1630 Commits

Author SHA1 Message Date
Taylor Wilsdon ff35fd7950 Merge pull request #578 from Bortlesboat/feat/555-auto-reply-headers
Docker Build and Push to GHCR / build-and-push (push) Has been cancelled
Ruff / ruff (push) Has been cancelled
feat(gmail): auto-populate In-Reply-To/References for reply drafts
2026-03-17 15:32:32 -04:00
Taylor Wilsdon 894564f378 refac tests 2026-03-17 15:32:14 -04:00
Taylor Wilsdon a87ac1737d add test 2026-03-17 14:34:21 -04:00
Taylor Wilsdon 464c182829 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feat/555-auto-reply-headers 2026-03-17 14:33:41 -04:00
Taylor Wilsdon 01ffcc1fc6 Merge pull request #565 from reinlemmens/fix/calendar-meeting-links
Display meeting links in calendar event output
2026-03-17 14:32:37 -04:00
Taylor Wilsdon 156a1f20ef Merge pull request #573 from seidnerj/fix/oauth-response-pages
fix: improve OAuth response pages for browser compatibility
2026-03-17 11:49:10 -04:00
Taylor Wilsdon 0dfed9081b Merge pull request #577 from Bortlesboat/fix/567-darwin-stdout
fix: suppress platform string output to stdout on macOS
2026-03-17 11:35:09 -04:00
Taylor Wilsdon ffcea58fdc refac 2026-03-17 10:42:32 -04:00
Taylor Wilsdon 96df53c5e9 refac 2026-03-17 10:34:30 -04:00
Taylor Wilsdon 16ce566d88 refac 2026-03-17 10:21:58 -04:00
Taylor Wilsdon 783806017d Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into fix/567-darwin-stdout 2026-03-17 10:12:11 -04:00
Taylor Wilsdon 86a159a364 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feat/555-auto-reply-headers 2026-03-17 10:11:51 -04:00
Taylor Wilsdon 9e499b0581 Merge pull request #586 from taylorwilsdon/issues/584
fix: remove consent from reauth flow and add tests
2026-03-17 08:47:23 -04:00
Taylor Wilsdon 441f052dca refac 2026-03-17 08:43:55 -04:00
Taylor Wilsdon 9ef6f72e26 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feat/555-auto-reply-headers 2026-03-17 08:37:20 -04:00
github-actions[bot] 6725789c80 style: auto-fix ruff lint and format 2026-03-17 12:36:42 +00:00
Taylor Wilsdon 66011fd814 remove consent from reauth flow and add tests 2026-03-17 08:36:08 -04:00
Taylor Wilsdon 1697c449b5 ruff 2026-03-17 08:28:07 -04:00
Taylor Wilsdon 370bd03a69 permissions for git workflows 2026-03-17 08:28:00 -04:00
Taylor Wilsdon c82ae0daa1 deps 2026-03-17 08:12:56 -04:00
Taylor Wilsdon 5e892675df bump deps 2026-03-17 08:12:41 -04:00
Taylor Wilsdon b9867a606f Merge pull request #583 from taylorwilsdon/dependabot/uv/uv-67de942c1e
Bump authlib from 1.6.7 to 1.6.9 in the uv group across 1 directory
2026-03-16 18:22:15 -04:00
Taylor Wilsdon 2ab22ee630 refac 2026-03-16 14:44:45 -04:00
Taylor Wilsdon e2c08b5f69 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into fix/calendar-meeting-links 2026-03-16 14:42:18 -04:00
Taylor Wilsdon f0269f4382 Merge pull request #581 from Bortlesboat/feat/547-quoted-reply-content
feat(gmail): support quoted reply content and signature positioning
2026-03-16 14:39:37 -04:00
Andrew Barnes e86c58e792 docs: add quote_original to draft_gmail_message docstring 2026-03-16 14:31:33 -04:00
dependabot[bot] 9b14a92876 Bump authlib from 1.6.7 to 1.6.9 in the uv group across 1 directory
Bumps the uv group with 1 update in the / directory: [authlib](https://github.com/authlib/authlib).


Updates `authlib` from 1.6.7 to 1.6.9
- [Release notes](https://github.com/authlib/authlib/releases)
- [Changelog](https://github.com/authlib/authlib/blob/main/docs/changelog.rst)
- [Commits](https://github.com/authlib/authlib/compare/v1.6.7...v1.6.9)

---
updated-dependencies:
- dependency-name: authlib
  dependency-version: 1.6.9
  dependency-type: indirect
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-16 15:41:46 +00:00
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
Bortlesboat adc003877c feat(gmail): support quoted reply content and signature positioning 2026-03-15 17:45:22 -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
Bortlesboat ebc3fcb044 feat(gmail): auto-populate In-Reply-To/References when thread_id is provided
When draft_gmail_message is called with a thread_id but without
in_reply_to or references headers, fetch the thread via the Gmail API
to extract Message-ID headers. This ensures reply drafts render inline
in Gmail's thread view instead of appearing as ghost drafts.

Fixes #555
2026-03-15 17:17:15 -04:00
Bortlesboat b5d7270fea fix: suppress platform string output to stdout on macOS 2026-03-15 17:13:07 -04:00
Taylor Wilsdon 92b4a7847f chore: release v1.14.3 2026-03-15 12:16:30 -04:00
seidnerj 4bdc96a554 fix: use consistent "tab" wording in success page CTAs
Change "Close Window" to "Close Tab" and "This window will close" to
"This tab will close" on the success page to match the rest of the PR.
2026-03-14 07:35:18 +02:00
seidnerj 31e27b76b6 fix: improve OAuth response pages for browser compatibility
window.close() is blocked by modern browsers for tabs not opened via
window.open(). The success page's close button and auto-close timer
silently fail as a result.

- Add tryClose() that attempts window.close() and falls back to
  showing "You can close this tab manually" after 500ms
- Remove ineffective auto-close scripts from error pages
2026-03-14 01:37:18 +02: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 59b3a2492c Reject heading_level and named_style_type together in validation
Add mutual exclusion guard so clients get a clear error instead of
named_style_type silently overriding heading_level.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 21:20:17 +01:00
Rein Lemmens 9285a5f97e Revert "Extract shared named style constant and use keyword args"
This reverts commit 00796f39c6.
2026-03-12 21:15:57 +01:00
Rein Lemmens 00796f39c6 Extract shared named style constant and use keyword args
- Extract VALID_NAMED_STYLE_TYPES constant in docs_helpers.py, reuse in validation_manager.py
- Switch build_paragraph_style call to keyword arguments for clarity and resilience

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 21:15:39 +01:00
Rein Lemmens e441ade35f Display meeting links in calendar event output
Conference/meeting links (Google Meet, Zoom, etc.) were fetched from the
API but never included in get_events() output. Extract video entry point
from conferenceData (with hangoutLink fallback) and display it in all
three output modes: single detailed, multi detailed, and basic list.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 21:08:16 +01: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
Taylor Wilsdon a5a896977f refac 2026-03-03 17:36:21 -05:00
Taylor Wilsdon 548394efbb Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feature_doc_tab 2026-03-03 17:34:26 -05:00
Vishal Verma 10cdcdd7e5 Add support for GDoc Tabs 2026-03-03 09:12:31 -08:00
Taylor Wilsdon 8a856cfecd Merge pull request #538 from taylorwilsdon/issues/536
enh: better fallback logic for html in emails
2026-03-03 11:28:08 -05:00
github-actions[bot] 95120d6f26 style: auto-fix ruff lint and format 2026-03-03 15:12:33 +00:00
Taylor Wilsdon 92840ac8e8 better fallback logic for html in emails 2026-03-02 09:29:53 -05:00
Taylor Wilsdon 04b9ae027c chore: release v1.14.1 2026-03-01 18:29:25 -05:00
Taylor Wilsdon d514c6219d Merge pull request #523 from jack-distl/claude/fix-cors-middleware-error-sPbo6
Fix TypeError: CORSMiddleware.__call__() missing 2 required positiona…
2026-03-01 18:29:10 -05:00
Taylor Wilsdon e999982848 cache test 2026-03-01 18:21:23 -05:00
Taylor Wilsdon 5b5da3386c refac 2026-03-01 18:21:12 -05:00
Taylor Wilsdon c9facbff3d refac 2026-03-01 17:59:45 -05:00
Taylor Wilsdon 217d727a9d Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into claude/fix-cors-middleware-error-sPbo6 2026-03-01 17:47:02 -05:00
Taylor Wilsdon 5af66ee0d2 refac 2026-03-01 17:47:00 -05:00
Taylor Wilsdon ab5c95a5d0 Merge pull request #532 from isair/fix/pkce-code-verifier
Fix PKCE code verifier not generated for initial OAuth flow
2026-03-01 17:39:59 -05:00
Taylor Wilsdon 662383b8b2 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into fix/pkce-code-verifier 2026-03-01 17:34:12 -05:00
Taylor Wilsdon 8463e4fd29 auth test 2026-03-01 17:34:11 -05:00
Taylor Wilsdon ef9c6a9c69 make better 2026-03-01 17:34:02 -05:00
Taylor Wilsdon 4d17c83057 chore: release v1.14.0 2026-03-01 17:26:40 -05:00
Taylor Wilsdon d20685cf78 Merge pull request #533 from taylorwilsdon/issues/526
enh: defusedxml
2026-03-01 17:26:06 -05:00
Taylor Wilsdon d8567f2beb defusedxml 2026-03-01 17:22:34 -05:00
Taylor Wilsdon 4e48fd2bb5 Merge pull request #531 from taylorwilsdon/tool_consolidation
enh: Tool Consolidation
2026-03-01 17:09:02 -05:00
github-actions[bot] 985a5a780f style: auto-fix ruff lint and format 2026-03-01 22:07:23 +00:00
Taylor Wilsdon ce296ded29 Merge branch 'tool_consolidation' of https://github.com/taylorwilsdon/google_workspace_mcp into tool_consolidation 2026-03-01 17:07:07 -05:00
Taylor Wilsdon 2c26338296 pr feedback 2026-03-01 17:06:55 -05:00
Taylor Wilsdon c077b4b4b4 Update gappsscript/apps_script_tools.py
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-03-01 17:04:35 -05:00
Taylor Wilsdon 49073995c9 refac 2026-03-01 16:00:39 -05:00
Baris Sencan 3361ed29e6 Fix PKCE code verifier not being generated for initial OAuth flow
When `create_oauth_flow()` is called without an explicit `code_verifier`
(i.e. during the initial auth flow in `start_auth_flow()`), the function
never sets `autogenerate_code_verifier=True` on the Flow constructor.

oauthlib 3.2+ automatically adds `code_challenge` to the authorization
URL at the session level, so Google expects a matching `code_verifier`
during the token exchange. However, since `Flow.code_verifier` remains
`None`, that `None` gets stored in the session store and later passed
back during the callback — causing Google to reject the token exchange
with `(invalid_grant) Missing code verifier`.

The fix adds `autogenerate_code_verifier=True` in the else branch so
the Flow object generates and exposes a proper PKCE code verifier that
gets stored and reused during the callback token exchange.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 18:38:29 +00:00
github-actions[bot] 1f34a8b8cc style: auto-fix ruff lint and format 2026-03-01 18:26:42 +00:00
Taylor Wilsdon d2651add30 merge 2026-03-01 13:26:14 -05:00
Taylor Wilsdon e9c9c28844 cleanup 2026-03-01 13:23:40 -05:00
github-actions[bot] eaab19b1ca style: auto-fix ruff lint and format 2026-03-01 17:54:47 +00:00
Taylor Wilsdon 5e4db385d3 refac 2026-03-01 12:50:40 -05:00
Taylor Wilsdon 241433937b Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into tool_consolidation 2026-03-01 12:36:10 -05:00
Taylor Wilsdon 6753531e9d refactor tools to consolidate all modify actions 2026-03-01 12:36:09 -05:00
Taylor Wilsdon e89935abcd Merge pull request #530 from taylorwilsdon/issues/525
fix: issues/525 and issues/485
2026-03-01 12:27:05 -05:00
Taylor Wilsdon 3fc864928e fix issues/525 and issues/485 2026-03-01 12:06:23 -05:00
Taylor Wilsdon 51d027ec8a Merge pull request #524 from 04cb/fix/docs-hyphenation
Fix docs: hyphenation for compound adjectives
2026-03-01 11:02:31 -05:00
Taylor Wilsdon 7cd46d72c7 Merge pull request #528 from taylorwilsdon/feature/checkbox-understanding
enh: Docs Checkbox Handling
2026-03-01 09:40:22 -05:00
github-actions[bot] 2778bc75a6 style: auto-fix ruff lint and format 2026-03-01 14:31:38 +00:00
Taylor Wilsdon 47160a5fc3 bump version 2026-03-01 09:30:28 -05:00
Taylor Wilsdon df9640b321 Add Google Docs checklist/checkbox recognition in markdown output
Detect checklist items in Google Docs API responses and render them as
- [ ] (unchecked) and - [x] (checked) in markdown, so LLMs understand
checkbox state instead of writing literal [x] or DONE text.

Closes #516

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 09:30:05 -05:00
04cb 5df7382fa1 Fix docs: hyphenation for compound adjectives 2026-03-01 14:49:55 +08:00
Claude cd326d0f2d Fix TypeError: CORSMiddleware.__call__() missing 2 required positional arguments
The _wrap_well_known_endpoint function assumed all route endpoints are regular
request handlers (async def handler(request) -> Response). However, the MCP
SDK's cors_middleware wraps handlers with CORSMiddleware, which is an ASGI app
expecting (scope, receive, send). When the wrapper called
`await endpoint(request)` on a CORSMiddleware instance, it passed only 1
argument instead of the required 3 ASGI args.

The fix detects whether the endpoint is a regular handler function or an ASGI
app (using the same inspect check as Starlette's Route constructor), and uses
the appropriate calling convention:
- Regular handlers: called as `await endpoint(request)` (existing behavior)
- ASGI apps: invoked via the ASGI interface `await endpoint(scope, receive, send)`
  with response capture to apply cache-busting headers

https://claude.ai/code/session_011S5zFTWRfKBJBUEanrhvQg
2026-03-01 04:56:33 +00:00
Taylor Wilsdon ca00c74634 Update README.md 2026-02-28 18:23:44 -04:00
Taylor Wilsdon 97c8ea28fd Update README.md 2026-02-28 18:23:25 -04:00
Taylor Wilsdon 3ee06351d8 Update README.md 2026-02-28 18:23:07 -04:00
Taylor Wilsdon 2bbd2e7ff7 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp 2026-02-28 18:21:59 -04:00
Taylor Wilsdon 93a7429b1c Delete .beads/issues.jsonl 2026-02-28 18:21:52 -04:00
Taylor Wilsdon 03bf50426b gitignore beads 2026-02-28 18:20:23 -04:00
Taylor Wilsdon 643b5c0871 gitignore beads 2026-02-28 18:19:50 -04:00
Taylor Wilsdon 88afb51f9d chore: release v1.13.1 2026-02-28 18:15:00 -04:00
Taylor Wilsdon 30a1f765f3 Merge pull request #508 from fmgs31/search_with_file_type
feat: Search with file type
2026-02-28 18:12:37 -04:00
Taylor Wilsdon 6c04e4f5a0 refac 2026-02-28 18:05:59 -04:00
Taylor Wilsdon 44205b66e0 merge conflicts 2026-02-28 17:53:39 -04:00
Taylor Wilsdon 328619412d Merge pull request #513 from fmgs31/drive_files_pagination_fix
Bugfix: Adding missing nextPageToken for pagination in drive tools
2026-02-28 17:45:48 -04:00
Taylor Wilsdon 8b69a49d40 ruff 2026-02-28 17:44:37 -04:00
Taylor Wilsdon f29f16e591 refac 2026-02-28 17:43:44 -04:00
Taylor Wilsdon 3e175c9998 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into drive_files_pagination_fix 2026-02-28 17:13:30 -04:00
Taylor Wilsdon bbdd61d08d fix attachments + test 2026-02-28 17:12:30 -04:00
Taylor Wilsdon d7e02772eb Merge pull request #510 from taylorwilsdon/issues/503
enh: Partial Scope Grants & Granular Permissions
2026-02-28 16:58:44 -04:00
Taylor Wilsdon 252aa2aede tests 2026-02-28 16:56:30 -04:00
Taylor Wilsdon 768ec5eef0 refac 2026-02-28 16:17:43 -04:00
Taylor Wilsdon 65e347568b Merge branch 'issues/503' of https://github.com/taylorwilsdon/google_workspace_mcp into issues/503 2026-02-28 11:50:22 -04:00
Taylor Wilsdon 34ada2c7ad better cachce management 2026-02-28 11:50:09 -04:00
github-actions[bot] 58256e42ee style: auto-fix ruff lint and format 2026-02-28 15:40:51 +00:00
Taylor Wilsdon edf9e94829 cachebusting for oauth endpoints, more tests, startup check for perms 2026-02-28 11:40:29 -04:00
Taylor Wilsdon f2986dcf2f pr feedback & readme update 2026-02-28 11:19:19 -04:00
Taylor Wilsdon 1e9078262f Merge branch 'issues/503' of https://github.com/taylorwilsdon/google_workspace_mcp into issues/503 2026-02-28 11:14:27 -04:00
Taylor Wilsdon 9f329fc935 ruff 2026-02-28 11:14:22 -04:00
Taylor Wilsdon 8ae833f0c7 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into issues/503 2026-02-28 11:13:23 -04:00
Taylor Wilsdon fcb7bad415 Merge pull request #520 from taylorwilsdon/issues/518
fix: pcke
2026-02-28 11:13:14 -04:00
Taylor Wilsdon 9dc9b1c825 pkce fix 2026-02-28 10:06:50 -04:00
github-actions[bot] e394ad90e2 style: auto-fix ruff lint and format 2026-02-27 21:00:00 +00:00
Taylor Wilsdon 92d2c15b80 Merge branch 'issues/503' of https://github.com/taylorwilsdon/google_workspace_mcp into issues/503 2026-02-27 16:59:38 -04:00
Taylor Wilsdon bb197243cd pr feedback 2026-02-27 16:59:18 -04:00
Taylor Wilsdon 608772497d Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into issues/503 2026-02-27 16:52:53 -04:00
Taylor Wilsdon 3d3932c562 Merge branch 'main' into drive_files_pagination_fix 2026-02-27 13:20:35 -04:00
Taylor Wilsdon 53e9bf73a2 Merge pull request #515 from fmgs31/hidden_details_drive_items
Optional hidden details in drive search and list
2026-02-27 13:17:28 -04:00
Francisco 1fab9a82fe gdrive - Moving nextPageToken to the end 2026-02-27 11:21:18 +13:00
Taylor Wilsdon 0e44ef924e Update README.md 2026-02-26 11:30:37 -04:00
Francisco 351afa4331 Optional hidden details in drive search and list 2026-02-26 22:53:40 +13:00
Francisco 35994ce1c5 Gdrive file type fileter - Fixing problems detected by coderabbitai 2026-02-26 13:03:19 +13:00
Francisco 117c6af88b Adding nextPageToken for pagination in drive tools 2026-02-26 12:46:51 +13:00
github-actions[bot] 86a8e1be4d style: auto-fix ruff lint and format 2026-02-25 23:44:33 +00:00
Taylor Wilsdon e81d0e367f no safe_print for exit error messages 2026-02-25 09:03:48 -04:00
Francisco a6c0d9d298 adding extra types for search filter 2026-02-25 22:22:27 +13:00
Francisco 5aafffe091 Test for search with file type 2026-02-25 21:42:09 +13:00
Francisco 7e33626b72 Search with file type 2026-02-25 21:27:29 +13:00
Taylor Wilsdon cfc68d8605 implement --permissions flag 2026-02-24 21:28:50 -04:00
Taylor Wilsdon aa520b72d3 fix all them tests 2026-02-24 21:09:14 -04:00
Taylor Wilsdon 9631b9e3eb chore: release v1.13.0 2026-02-24 11:24:38 -04:00
Taylor Wilsdon 0b0890a2e8 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp 2026-02-24 11:24:25 -04:00
Taylor Wilsdon a1a14c8925 Merge pull request #468 from taylorwilsdon/fastmcp_v3
enh: Implement FastMCP v3
2026-02-24 11:24:05 -04:00
Taylor Wilsdon eaac938737 prep for release 2026-02-24 11:23:43 -04:00
Taylor Wilsdon e85b7aa3db logfix 2026-02-24 11:23:22 -04:00
Taylor Wilsdon b9524a9090 review fixes 2026-02-24 11:20:27 -04:00
Taylor Wilsdon e1cf0d44da address pr feedback 2026-02-24 10:47:53 -04:00
Taylor Wilsdon 0c4a9708fe avoid early return in read only oauth 2 mode 2026-02-24 10:38:06 -04:00
Taylor Wilsdon b7d1f613d0 pin 3.0.2 for now 2026-02-24 10:36:23 -04:00
Taylor Wilsdon b0c6a83c5f Merge branch 'fastmcp_v3' of https://github.com/taylorwilsdon/google_workspace_mcp into fastmcp_v3 2026-02-24 10:31:41 -04:00
Taylor Wilsdon 1ae72ef85b Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into fastmcp_v3 2026-02-24 10:31:33 -04:00
Taylor Wilsdon 8d2b23ab0e Merge pull request #502 from stakeswky/fix/non-ascii-attachment-filenames
fix: use RFC 2231 encoding for non-ASCII attachment filenames
2026-02-24 10:31:20 -04:00
Taylor Wilsdon 252487fd88 Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-24 10:30:36 -04:00
github-actions[bot] 3f9821b525 style: auto-fix ruff lint and format 2026-02-24 14:29:22 +00:00
Taylor Wilsdon f38dbc48a9 Merge branch 'fastmcp_v3' of https://github.com/taylorwilsdon/google_workspace_mcp into fastmcp_v3 2026-02-24 10:29:04 -04:00
Taylor Wilsdon de1cd84730 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into fastmcp_v3 2026-02-24 10:28:57 -04:00
Taylor Wilsdon 285406e2ee Merge pull request #495 from mickey-mikey/fix/windows-attachment-corruption
Fix Windows attachment corruption: add O_BINARY flag to os.open
2026-02-24 10:28:53 -04:00
github-actions[bot] c454cc9630 style: auto-fix ruff lint and format 2026-02-24 14:27:22 +00:00
Taylor Wilsdon 69f1a0e9bb remove direct _components usage, prep for v3 rollout 2026-02-24 10:26:52 -04:00
Taylor Wilsdon 1ebc758490 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into fastmcp_v3
# Conflicts:
#	uv.lock
2026-02-24 10:13:14 -04:00
Taylor Wilsdon 1e3dab2121 merge 2026-02-24 10:11:00 -04:00
User 2526b87a52 fix: also strip null bytes from attachment filename for consistency 2026-02-23 11:14:21 +08:00
stakeswky 0dc9985d33 fix: use RFC 2231 encoding for non-ASCII attachment filenames
When creating Gmail drafts with attachments whose filenames contain
non-ASCII characters (e.g. umlauts like ü, ö, ä), Gmail displays
"noname" instead of the actual filename.

The root cause is that Content-Disposition was built via string
formatting (f'attachment; filename="{safe_filename}"'), which embeds
raw non-ASCII bytes in the header.  Gmail cannot parse these and falls
back to "noname".

Fix: pass the filename as a keyword argument to add_header(), which
makes Python's email library automatically apply RFC 2231 encoding
(filename*=utf-8''...) for non-ASCII names while keeping ASCII
filenames unchanged.

Fixes #500
2026-02-23 10:40:56 +08:00
mickey-mikey 1e36375493 Merge branch 'taylorwilsdon:main' into fix/windows-attachment-corruption 2026-02-22 19:54:41 +11:00
mickey-mikey ffeba1f2f3 fix: add O_BINARY flag to os.open for Windows attachment writes
Fixes #494 - Windows attachment corruption for PNG/PDF files.

On Windows, os.open() defaults to text mode, which translates LF (0x0a)
bytes to CRLF (0x0d 0x0a) during os.write(). This corrupts any binary
attachment containing 0x0a bytes (PNG headers, PDFs, etc.).

The fix adds os.O_BINARY to the os.open() flags using the standard
getattr(os, 'O_BINARY', 0) idiom, which returns the flag on Windows
and 0 (no-op) on platforms where it doesn't exist.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 11:45:37 +11:00
Taylor Wilsdon 724234e509 Update README.md 2026-02-21 07:56:01 -05:00
Taylor Wilsdon 519578cdf7 chore: release v1.12.0 2026-02-19 10:05:36 -05:00
Taylor Wilsdon c3d1e250e6 Merge pull request #428 from francescomucio/feature/create-drive-folder
feat(drive): add create_drive_folder tool and unit test
2026-02-19 10:04:26 -05:00
Taylor Wilsdon 24a4f376d8 refac 2026-02-19 09:58:49 -05:00
Taylor Wilsdon 4f5c65953c Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feature/create-drive-folder 2026-02-19 09:55:07 -05:00
Taylor Wilsdon e9d4d291e2 Merge pull request #488 from drewgillson/feat/chat-attachment-download
Add chat attachment support: surface metadata and download files
2026-02-19 09:47:20 -05:00
Taylor Wilsdon bdc815a723 fix missing readme and tool tier entry for previous addition 2026-02-19 09:46:51 -05:00
Taylor Wilsdon 7d5c0fdbca ruff & mimetype 2026-02-19 09:42:42 -05:00
Taylor Wilsdon eaa13d3f7e Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feat/chat-attachment-download 2026-02-19 09:41:06 -05:00
Taylor Wilsdon 6f2a88c105 Merge pull request #489 from MaxGhenis/feat/comment-anchor-text
feat: surface quotedFileContent (anchor text) in comment reading
2026-02-19 09:39:56 -05:00
Taylor Wilsdon 8b8d74cc3f Merge pull request #490 from MaxGhenis/feat/doc-markdown-export
feat(docs): add get_doc_as_markdown tool with comment context
2026-02-19 09:38:26 -05:00
Max Ghenis 7b7fcfdb58 fix: add URL-to-ID extraction, comment_mode validation, and pipe escaping
Address CodeRabbit review feedback:
- Extract doc ID from full Google Docs URLs (e.g. /d/<id>/)
- Validate comment_mode against allowed values
- Escape pipe characters in table cell text

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 19:26:31 -08:00
Max Ghenis 08ad7ad308 feat(docs): add get_doc_as_markdown tool with comment context
Adds a new `get_doc_as_markdown` tool that converts Google Docs to clean
Markdown preserving formatting (headings, bold/italic/strikethrough, links,
code spans, ordered/unordered lists with nesting, and tables).

Optionally overlays comments with their anchor text (quotedFileContent) —
the specific text each comment is attached to — in two modes:
- inline: footnote-style references placed at the anchor text location
- appendix: all comments grouped at the bottom with blockquoted anchors

This gives AI agents full document context in a single tool call, unlike
get_doc_content which strips all formatting to plain text.

New files:
- gdocs/docs_markdown.py: Converter + comment formatting logic
- tests/gdocs/test_docs_markdown.py: 18 tests

Tool tier: extended (alongside search_docs, export_doc_to_pdf, etc.)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 19:15:56 -08:00
Max Ghenis d4070a209b feat: surface quotedFileContent (anchor text) in comment reading
When reading comments via read_document_comments / read_spreadsheet_comments /
read_presentation_comments, the Drive API's quotedFileContent.value field is
now requested and displayed as "Quoted text:" in the output. This shows which
specific text in the document each comment is anchored to.

Comments without anchor text (document-level comments) omit the line.

Relates to #210

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 19:12:21 -08:00
Drew Gillson 4f3eec459d Add chat attachment support: surface metadata and download images/files
Previously, get_messages and search_messages completely ignored the
attachment field on Chat API messages. This adds:

- Attachment metadata (filename, type) displayed inline in get_messages
  and search_messages output
- New download_chat_attachment tool that downloads attachments via the
  Chat API media endpoint and saves to local disk

The download uses httpx with a Bearer token against the
chat.googleapis.com/v1/media endpoint (with alt=media), which works
correctly in both OAuth 2.0 and OAuth 2.1 modes. The attachment's
downloadUri field is intentionally ignored as it points to
chat.google.com which requires browser session cookies.

Key details:
- Uses attachmentDataRef.resourceName for the media endpoint URL
- No new OAuth scopes required (existing chat_read is sufficient)
- Tool registered in the extended tier
- 10 unit tests covering metadata display, download, and edge cases
2026-02-18 17:02:18 -07:00
Taylor Wilsdon 860bc4c16f Merge pull request #484 from sethladd/add-chat-spaces-readonly-scope
Add chat.spaces.readonly scope for listing spaces
2026-02-18 13:21:24 -05:00
Taylor Wilsdon a6988cf643 fix ruff workflow 2026-02-18 13:19:49 -05:00
Taylor Wilsdon 9b8dc6568c chat spaces readonly scope 2026-02-18 12:46:08 -05:00
Taylor Wilsdon 28f03c2e92 ruff 2026-02-18 12:36:25 -05:00
Taylor Wilsdon 96725470ec Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into add-chat-spaces-readonly-scope 2026-02-18 12:36:18 -05:00
Taylor Wilsdon 6b21632e58 Merge pull request #486 from taylorwilsdon/issues/483
enh: Refresh flow when scopes change since last authorization
2026-02-18 12:34:11 -05:00
Taylor Wilsdon f62e0bbd26 pr feedback 2026-02-18 12:28:17 -05:00
Taylor Wilsdon 3cc40c1357 Merge branch 'issues/483' of github.com:taylorwilsdon/google_workspace_mcp into issues/483 2026-02-18 12:22:32 -05:00
Taylor Wilsdon 90a2a9c00b set for scopes 2026-02-18 12:22:13 -05:00
github-actions[bot] 950206c707 style: auto-fix ruff lint and format 2026-02-18 16:49:48 +00:00
Taylor Wilsdon a28fa0a249 address issues/483 2026-02-18 11:48:53 -05:00
Seth Ladd d964324e5d Add chat.spaces.readonly scope for listing spaces
The list_spaces tool was using chat.messages.readonly which is overly
broad for simply enumerating available spaces. This adds the
chat.spaces.readonly scope and uses it for list_spaces, following the
principle of least privilege.

Closes #479

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 20:58:08 -08:00
Taylor Wilsdon a047572c98 Merge pull request #482 from drewgillson/feat/chat-enhancements
feat(chat): People API sender resolution, rich links, threads, and reactions
2026-02-17 21:11:16 -05:00
Taylor Wilsdon d542d4aadb cache that shit 2026-02-17 21:10:52 -05:00
Taylor Wilsdon 3d9d0fb473 refactor github actions for ruff 2026-02-17 21:06:03 -05:00
Taylor Wilsdon e90e22d719 refac 2026-02-17 21:02:48 -05:00
Taylor Wilsdon 2b551e5f57 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into feat/chat-enhancements 2026-02-17 21:01:46 -05:00
Taylor Wilsdon 6eca4ddcc4 ruff 2026-02-17 21:01:44 -05:00
Taylor Wilsdon ace2bebd5c Create FUNDING.yml 2026-02-17 20:56:51 -05:00
Drew Gillson be2f68ff68 feat(chat): add People API sender resolution, rich links, threads, and reactions
Resolves several gaps in the Google Chat tools:

**Sender resolution via People API:**
- Chat API doesn't return displayName for service account access
- New `_resolve_sender()` uses People API to look up user IDs
- In-memory cache avoids repeated lookups
- get_messages and search_messages now use `require_multiple_services`
  to inject both chat and people services

**Rich link (smart chip) extraction:**
- When users paste Workspace URLs that render as smart chips, the URL
  is stripped from the `text` field and only available in annotations
- New `_extract_rich_links()` extracts RICH_LINK annotation URIs
- Surfaced as `[linked: <url>]` in get_messages and search_messages

**Thread support:**
- get_messages shows `[thread: ...]` for threaded replies
- send_message gains `thread_name` param for replying in existing threads
  using `messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD`
- Fixes existing `thread_key` param which was missing messageReplyOption

**Emoji reactions:**
- get_messages shows `[reactions: 👍x3, 🎉x1]` from emojiReactionSummaries
- New `create_reaction` tool to add emoji reactions to messages
2026-02-17 17:28:29 -07:00
Taylor Wilsdon 6322bf8f67 chore: release v1.11.5 2026-02-17 16:54:01 -05:00
Taylor Wilsdon 1d4efd4376 bump 2026-02-17 16:53:53 -05:00
Taylor Wilsdon f8b7ef16ce chore: release v1.11.4 2026-02-17 16:52:08 -05:00
Taylor Wilsdon d3bbd4eec5 bump 2026-02-17 16:51:56 -05:00
Taylor Wilsdon c0cdaa6e39 chore: release v1.11.3 2026-02-17 16:50:47 -05:00
Taylor Wilsdon b86dba469b clean up dxt, update license in pyproject 2026-02-17 16:50:38 -05:00
Taylor Wilsdon 9df78a2e16 Merge pull request #436 from the-gigi-pplx/feature/doc-links
Add hyperlink support to modify_doc_text
2026-02-17 15:10:44 -05:00
Taylor Wilsdon 1eae403b64 add link url 2026-02-17 14:54:34 -05:00
Taylor Wilsdon de8865333c ruff 2026-02-17 14:49:59 -05:00
Taylor Wilsdon 40e827810a refac 2026-02-17 14:49:49 -05:00
Taylor Wilsdon d4bbd6db1c chore: release v1.11.2 2026-02-15 17:01:52 -05:00
Taylor Wilsdon 7cc281e26a dxt 2026-02-15 17:01:46 -05:00
Taylor Wilsdon 9d1c8f86f3 Merge pull request #415 from xuiltul/fix/attachment-storage-absolute-path
fix: use absolute path for attachment storage and improve filename resolution
2026-02-15 17:01:30 -05:00
Taylor Wilsdon 5a784a2ea7 use os.write for short write loops 2026-02-15 16:54:37 -05:00
Taylor Wilsdon 9588396fcb ruff 2026-02-15 16:46:28 -05:00
Taylor Wilsdon 39fe339dc8 fixes 2026-02-15 16:46:19 -05:00
Taylor Wilsdon 7cfa10f457 readme and storage improvements 2026-02-15 16:28:34 -05:00
Taylor Wilsdon 0131f5472f fixes 2026-02-15 16:17:03 -05:00
Taylor Wilsdon bb87e6f9c8 main and ruff 2026-02-15 12:25:16 -05:00
Taylor Wilsdon 87b7889e5b Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into fix/attachment-storage-absolute-path 2026-02-15 12:25:08 -05:00
Taylor Wilsdon 4c7f373902 Merge pull request #472 from cfdude/feat/batch-paragraph-style
feat(docs): add update_paragraph_style to batch operations
2026-02-14 12:19:29 -05:00
Taylor Wilsdon 935fb29398 ruff 2026-02-14 12:16:25 -05:00
Taylor Wilsdon 360da94e9e refac, add tests 2026-02-14 12:15:43 -05:00
Rob Sherman f07072d1d9 fix: remove duplicate .gitignore entries 2026-02-13 17:08:51 -08:00
Rob Sherman c34751fa22 chore: add local development files to .gitignore
Exclude local-only files from version control:
- .serena/ - local development directory
- Caddyfile - local Caddy reverse proxy config
- ecosystem.config.cjs - local PM2 ecosystem config
2026-02-13 16:48:16 -08:00
Rob Sherman fd4aaace19 fix(docs): address CodeRabbit review feedback
- Allow negative indent_first_line values for hanging indents (Google
  Docs API supports this)
- Add update_paragraph_style to get_validation_summary() for consistency
2026-02-13 15:11:31 -08:00
Rob Sherman d02d147252 feat(docs): add update_paragraph_style to batch_update_doc operations
Enable paragraph-level styling (headings, alignment, spacing, indentation)
within atomic batch operations, complementing the existing format_text support.
2026-02-13 15:11:18 -08:00
Taylor Wilsdon 755aa5550f Merge pull request #471 from cfdude/fix/credential-store-list-users
fix(auth): filter non-credential files from list_users()
2026-02-13 17:11:31 -05:00
Rob Sherman f1705ce81b fix(auth): filter non-credential files from list_users()
LocalDirectoryCredentialStore.list_users() enumerates all .json files
in the credentials directory, but oauth_states.json (written by
PersistentOAuthStateStore) is not a user credential file. In
single-user mode, this file can be picked up first alphabetically,
causing a TypeError when accessing credentials.scopes (None) since
the state file has no scopes field.

Filter out known non-credential files and filenames without '@' to
ensure only actual user credential files are returned.
2026-02-13 13:40:56 -08:00
Taylor Wilsdon 0f481ef81a Merge pull request #470 from taylorwilsdon/dpopes_knows_best
enh: harden security around attachment functionality
2026-02-13 16:32:29 -05:00
Taylor Wilsdon cb628bafa4 cleanup http if error not httpx 2026-02-13 16:27:23 -05:00
Taylor Wilsdon a756b1846f Merge branch 'dpopes_knows_best' of https://github.com/taylorwilsdon/google_workspace_mcp into dpopes_knows_best 2026-02-13 16:14:21 -05:00
Taylor Wilsdon 39e055a350 readme 2026-02-13 16:14:10 -05:00
Taylor Wilsdon 3ea29dc14d Update core/utils.py
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-02-13 16:13:33 -05:00
Taylor Wilsdon dffdb7ffa7 pr feedback 2026-02-13 16:12:00 -05:00
Taylor Wilsdon 5280f3c634 refac 2026-02-13 16:05:56 -05:00
Taylor Wilsdon 59f8823c6b refac 2026-02-13 16:04:03 -05:00
Taylor Wilsdon 7f90073fb4 ruff 2026-02-13 15:26:37 -05:00
Taylor Wilsdon 71c054c664 harden security around attachment functionality and explicitly disallow reading sensitive files 2026-02-13 15:24:57 -05:00
Taylor Wilsdon ffba4c2f29 chore: release v1.11.1 2026-02-13 14:36:08 -05:00
Taylor Wilsdon 08c1682d7c update dxt 2026-02-13 14:35:54 -05:00
Taylor Wilsdon b3ee7d0826 chore: release v1.11.0 2026-02-13 14:35:11 -05:00
Taylor Wilsdon ac10811fa8 update dxt 2026-02-13 14:27:30 -05:00
Taylor Wilsdon 5aec402a07 update dxt 2026-02-13 14:27:25 -05:00
Taylor Wilsdon a5c1bd7c45 Merge pull request #469 from NxFerrara/fix/oauth21-refresh-store-session
fix: add missing token_uri, client_id, client_secret to OAuth 2.1 refresh store_session
2026-02-13 14:26:39 -05:00
Nicholas Xavier Ferrara eddf940454 fix: add missing token_uri, client_id, client_secret to OAuth 2.1 refresh store_session
The store_session call in the OAuth 2.1 credential refresh path (get_credentials)
omits token_uri, client_id, client_secret, and issuer. These are stored as None,
causing subsequent refresh attempts to fail and forcing full re-authentication.

The correct pattern already exists in three other store_session calls in the same
file (lines 151, 522, 750) — this aligns the refresh path to match.
2026-02-13 13:51:47 -05:00
Taylor Wilsdon 0be2776504 v3 auth middleware fix 2026-02-13 10:20:49 -05:00
Taylor Wilsdon 0075e8338f v3 auth middleware fix 2026-02-13 10:20:39 -05:00
Taylor Wilsdon 49b8238b1c Merge pull request #463 from taylorwilsdon/alert-autofix-51
Potential fix for code scanning alert no. 51: Workflow does not contain permissions
2026-02-13 10:18:46 -05:00
Taylor Wilsdon ed8718ee09 Merge pull request #467 from taylorwilsdon/cleanup_bodyparams
fix: clean up bodyparams logic
2026-02-13 10:18:14 -05:00
Taylor Wilsdon 41b3e3be0d fix docker 2026-02-13 10:16:47 -05:00
Taylor Wilsdon 9a6d597e69 ruff 2026-02-13 10:15:31 -05:00
Taylor Wilsdon a336131558 clean up bodyparams logic 2026-02-13 10:07:10 -05:00
Taylor Wilsdon 1a1e64875e Potential fix for code scanning alert no. 51: Workflow does not contain permissions
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-02-12 21:11:46 -05:00
Taylor Wilsdon a3107e900b Merge pull request #346 from DrFaust92/publish-docker
Update GitHub Actions workflows: standardize action versions and add Docker publish workflow
2026-02-12 17:52:10 -05:00
Taylor Wilsdon 320ac1956a Merge pull request #459 from taylorwilsdon/issues/440
fix: Issues/440
2026-02-11 19:05:16 -05:00
Taylor Wilsdon a24804771a get idiomatic with it 2026-02-11 19:03:24 -05:00
Taylor Wilsdon 2232094616 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into issues/440 2026-02-11 19:02:00 -05:00
Taylor Wilsdon ad53debf2f Merge pull request #432 from Milofax/fix/cross-service-scopes
fix(auth): add cross-service Drive scopes for docs and sheets tools
2026-02-11 15:38:14 -05:00
Milofax 821804cf60 style: format DOCS_SCOPES list for ruff compliance
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 18:06:19 +01:00
Taylor Wilsdon d31e2816a4 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into issues/440 2026-02-11 11:58:24 -05:00
Taylor Wilsdon f6aaf75b4f remove Field designation 2026-02-11 11:58:19 -05:00
Taylor Wilsdon ad6b940ccd Merge pull request #458 from taylorwilsdon/issues/457
enh: add message id headers for proper threading in in non-gmail clients
2026-02-11 11:55:52 -05:00
Taylor Wilsdon 8c92390576 add message id headers for proper threading in in non-gmail clients 2026-02-11 11:52:07 -05:00
Taylor Wilsdon 670aca0522 Merge pull request #453 from consciousfounders/fix/ssrf-create-drive-file
fix: add SSRF protection to create_drive_file
2026-02-11 11:43:11 -05:00
Taylor Wilsdon 52b0ff8190 Merge pull request #454 from taylorwilsdon/dependabot/uv/uv-d1091effbf
Bump cryptography from 46.0.4 to 46.0.5 in the uv group across 1 directory
2026-02-11 10:45:23 -05:00
dependabot[bot] 2002e87690 Bump cryptography in the uv group across 1 directory
Bumps the uv group with 1 update in the / directory: [cryptography](https://github.com/pyca/cryptography).


Updates `cryptography` from 46.0.4 to 46.0.5
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/46.0.4...46.0.5)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 46.0.5
  dependency-type: direct:production
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-11 03:01:14 +00:00
consciousfounders eab0aa61e8 fix: add SSRF protection to create_drive_file
Add _validate_url_not_internal() check for HTTP/HTTPS URLs in
create_drive_file, matching the existing protection in
import_to_google_doc (line 888).

Closes #452

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 18:55:30 -08:00
Taylor Wilsdon 78a0db215e Merge pull request #451 from taylorwilsdon/issues/449
fix: prune logs & persist refresh
2026-02-10 17:28:00 -05:00
Taylor Wilsdon bbee795c16 ruff 2026-02-10 17:22:28 -05:00
Taylor Wilsdon 35fc66f329 persistence call 2026-02-10 17:19:18 -05:00
Taylor Wilsdon b85b563cdc stop httpx logging full urls 2026-02-10 17:17:17 -05:00
Taylor Wilsdon 3b75ab11fb fix 448 2026-02-10 17:00:41 -05:00
Taylor Wilsdon bc2279bc10 Merge pull request #450 from taylorwilsdon/issues/448
fix: cli mode google functions
2026-02-10 16:45:08 -05:00
Taylor Wilsdon dd248f5af6 garbage import fix 2026-02-10 16:41:21 -05:00
Taylor Wilsdon 487db5c849 sentinel safeguard 2026-02-10 14:25:25 -05:00
Taylor Wilsdon a4a3bdb5c9 pydantic 2026-02-10 14:20:49 -05:00
Taylor Wilsdon b0991018ff refac 2026-02-10 14:15:12 -05:00
Taylor Wilsdon 2bef6d0c0b fix cli mode 2026-02-10 14:05:56 -05:00
Taylor Wilsdon 58a730f735 Merge pull request #442 from Leandro3996/fix/appscript-get-content-endpoint
fix: use getContent() instead of get() for Apps Script file retrieval
2026-02-10 10:36:33 -05:00
Taylor Wilsdon 9bd3bedec6 refac 2026-02-10 10:34:27 -05:00
Taylor Wilsdon ee2bf4b893 merge 2026-02-10 10:32:03 -05:00
Taylor Wilsdon 53de232639 Merge pull request #444 from taylorwilsdon/issues/443
fix issues/443
2026-02-09 14:31:41 -05:00
Taylor Wilsdon 4c09a35c0f feedback 2026-02-09 14:27:52 -05:00
Taylor Wilsdon ce9d4190e1 remove beads 2026-02-09 14:23:14 -05:00
Taylor Wilsdon a897353435 remove beads 2026-02-09 14:22:43 -05:00
Taylor Wilsdon 8eac9c0575 fix issues/443 2026-02-09 14:22:04 -05:00
Leandro3996 2af9ced64d fix: use getContent() instead of get() for Apps Script file retrieval
projects().get() only returns project metadata (title, scriptId, dates),
not file contents. This caused get_script_project to always show an empty
files list and get_script_content to return "File not found" for
container-bound scripts.

The correct method is projects().getContent() which maps to
GET /v1/projects/{scriptId}/content and returns all files with
their source code.

Fixes #441

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 13:47:21 -03:00
Taylor Wilsdon 6c32126796 chore: release v1.10.7 2026-02-08 21:09:23 -05:00
Taylor Wilsdon 8fc737fd65 version 2026-02-08 21:09:12 -05:00
Taylor Wilsdon 4811224bd9 chore: release v1.10.6 2026-02-08 21:08:29 -05:00
Taylor Wilsdon fb3d806de4 release 2026-02-08 21:08:16 -05:00
Taylor Wilsdon 6422f6e149 no publish flow 2026-02-08 21:02:38 -05:00
Taylor Wilsdon e93ab8b4cb chore: release v1.10.5 2026-02-08 20:53:17 -05:00
Taylor Wilsdon 06c09fac16 version 2026-02-08 20:53:09 -05:00
Taylor Wilsdon 862c29c597 add server.json 2026-02-08 20:50:36 -05:00
Taylor Wilsdon 8f608cc6b5 chore: release v1.10.4 2026-02-08 20:49:29 -05:00
Taylor Wilsdon c8f4986ea7 automate publishing to mcp registry 2026-02-08 20:49:18 -05:00
Taylor Wilsdon 4103210f47 publish to mcp registry workflow 2026-02-08 20:32:37 -05:00
Taylor Wilsdon 9e8b918628 chore: release v1.10.3 2026-02-08 20:07:15 -05:00
Taylor Wilsdon 2224e6961d mcp registry 2026-02-08 20:07:08 -05:00
Taylor Wilsdon cb0c64e5f8 chore: release v1.10.2 2026-02-08 20:02:48 -05:00
Taylor Wilsdon d69ce93997 mcp registry 2026-02-08 20:02:33 -05:00
Taylor Wilsdon 31f44fc193 dxt 2026-02-08 19:05:07 -05:00
Taylor Wilsdon fb053cf473 chore: release v1.10.1 2026-02-08 19:04:35 -05:00
Taylor Wilsdon 09af70bcd3 Merge pull request #438 from taylorwilsdon/issues/366
enh: Add paragraph-level list formatting support to Google Docs + Hyperlinks for sheets
2026-02-08 19:04:17 -05:00
Taylor Wilsdon 5340887658 refac 2026-02-08 19:00:52 -05:00
Taylor Wilsdon 47443730df refac 2026-02-08 18:53:47 -05:00
Taylor Wilsdon be6a42e6e5 refac 2026-02-08 18:15:36 -05:00
Taylor Wilsdon 02a0d214e5 beads 2026-02-08 17:44:08 -05:00
Taylor Wilsdon 5646672ded hyperlink support 2026-02-08 17:41:15 -05:00
Taylor Wilsdon 4112e67df2 nesting for paragraph styling 2026-02-08 17:38:20 -05:00
Taylor Wilsdon ad25ec304f Merge branch 'issues/366' of github.com:taylorwilsdon/google_workspace_mcp into issues/366 2026-02-08 16:12:25 -05:00
Taylor Wilsdon b6ead2e23c pr feedback 2026-02-08 16:09:37 -05:00
Taylor Wilsdon f0d442145b Delete docs/README.md 2026-02-08 16:08:01 -05:00
Taylor Wilsdon 464bd8090f Add paragraph-level list formatting support to Google Docs
Enhanced the update_paragraph_style tool to support creating bulleted and
numbered lists with nested indentation levels (0-8). This enables agents to
create well-structured documents that match professional document styles.

Changes:
- Enhanced update_paragraph_style tool with:
  - create_list parameter: Create bulleted (UNORDERED) or numbered (ORDERED) lists
  - list_nesting_level parameter: Support nested list items (0-8 levels)
- Updated create_bullet_list_request helper to accept nesting_level parameter
- Updated documentation in README.md, docs/README.md, and docs/README_NEW.md
- Tool remains in Extended tier as defined in tool_tiers.yaml

This addresses the feature request to expose paragraph-level formatting
operations (named styles, bullets, indentation) that were previously missing
from the character-level modify_doc_text tool.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 15:42:58 -05:00
Taylor Wilsdon 40af5f1528 Merge pull request #437 from taylorwilsdon/copilot/fix-invalid-path-saving-pc
Remove Windows-incompatible filename with asterisk character
2026-02-08 14:28:50 -05:00
copilot-swe-agent[bot] aff64e7e79 Remove Windows-incompatible filename and exclude agent instructions from distribution
Co-authored-by: taylorwilsdon <6508528+taylorwilsdon@users.noreply.github.com>
2026-02-08 19:27:38 +00:00
copilot-swe-agent[bot] 9ab27857be Initial plan 2026-02-08 19:26:17 +00:00
Gigi Sayfan 34957de2e4 Add hyperlink support to modify_doc_text 2026-02-07 13:44:09 -08:00
Taylor Wilsdon 79a578eda9 Merge pull request #435 from taylorwilsdon/issues/422
enh: add drive perms tool
2026-02-07 14:19:53 -05:00
Taylor Wilsdon 771de29288 fixes 2026-02-07 14:18:10 -05:00
Taylor Wilsdon 67dbede82a ruff 2026-02-07 13:52:55 -05:00
Taylor Wilsdon 3e3af2b5bd add drive perms tool 2026-02-07 13:49:31 -05:00
Taylor Wilsdon 5ed87d8d10 dxt 2026-02-07 13:44:24 -05:00
Taylor Wilsdon 60ab4f171d chore: release v1.10.0 2026-02-07 13:43:54 -05:00
Taylor Wilsdon d8f3d08b2d Merge pull request #430 from taylorwilsdon/external-oauth-clean
Fix: External Oauth Token Handling
2026-02-07 13:40:09 -05:00
Taylor Wilsdon 72f06d5853 refac 2026-02-07 13:35:53 -05:00
Taylor Wilsdon 24dca13425 refac 2026-02-07 13:35:32 -05:00
Taylor Wilsdon dbab29d356 fix #433 2026-02-07 13:29:22 -05:00
Milofax d91070502f fix(auth): add cross-service Drive scopes for docs and sheets tools
Several docs tools (search_docs, get_doc_content, list_docs_in_folder,
export_doc_to_pdf) and sheets tools (list_spreadsheets) internally use
the Google Drive API but only receive docs/sheets-specific OAuth scopes
when configured with `--tools docs sheets` (without `drive`).

This adds the minimal required Drive scopes as cross-service dependencies:
- docs: drive.readonly (metadata queries) + drive.file (PDF export)
- sheets: drive.readonly (spreadsheet listing)

This follows the existing pattern where appscript already includes
DRIVE_FILE_SCOPE for its Drive API dependency.

The alternative workaround of adding `--tools drive` exposes 14
full-access Drive tools which is undesirable from a security perspective.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 12:19:05 +01:00
Taylor Wilsdon bae425f754 refac 2026-02-06 20:33:59 -05:00
Taylor Wilsdon 88542afe31 refac 2026-02-06 14:45:15 -05:00
Taylor Wilsdon fab19d69e0 uv 2026-02-06 14:40:31 -05:00
Taylor Wilsdon ece2ee12d7 fix 2026-02-06 14:40:16 -05:00
Taylor Wilsdon a0a0a9667f Merge pull request #416 from ugoano/feature/enhanced-sheets-formatting
feat(sheets): add text wrapping, alignment, and font formatting to format_sheet_range
2026-02-06 14:40:08 -05:00
Taylor Wilsdon b30fc1c83d ruff 2026-02-06 14:35:03 -05:00
Taylor Wilsdon b0743ec923 fix import 2026-02-06 14:33:24 -05:00
Taylor Wilsdon 1877d70077 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into external-oauth-clean 2026-02-06 12:50:07 -05:00
Taylor Wilsdon 8fee8eab1f Merge pull request #425 from taylorwilsdon/jwt_handling_enh
enh: jwt handling improvements
2026-02-06 12:49:23 -05:00
Alexander b7d8f61cf7 Update external_oauth_provider.py
avoided depreciated date time format
2026-02-06 12:10:43 -05:00
Taylor Wilsdon 2df308c7f7 ruff 2026-02-06 10:59:46 -05:00
Taylor Wilsdon 0f80ce1a4d Revert "fix: address Copilot review feedback on PR #416"
This reverts commit e5a746d8ca.
2026-02-06 10:54:44 -05:00
Taylor Wilsdon c7d677ffff refac _find_any_credentials to tuple for legacy mode refresh fix 2026-02-06 10:53:59 -05:00
Francesco Mucio d6e9e9c7a3 style: apply ruff format to create_drive_folder changes 2026-02-06 11:38:02 +01:00
Francesco Mucio cc2b23d3db feat(drive): add create_drive_folder tool and unit test
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 11:32:19 +01:00
Arno e5a746d8ca fix: address Copilot review feedback on PR #416
- Use consistent terminology in confirmation message ("background color"
  to match "text color")
- Tighten test assertions for invalid parameter validation to check
  parameter name and all allowed values instead of loose substring matches
- Remove unrelated calendar_tools.py changes (lambda reformatting, guest
  permissions, query_freebusy) that belong in separate PRs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 00:01:53 +00:00
Taylor Wilsdon 817db85522 refac 2026-02-05 14:30:57 -05:00
Taylor Wilsdon 8cdd674a0c Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feature/enhanced-sheets-formatting 2026-02-05 14:24:11 -05:00
Taylor Wilsdon 885a413a5a ruff 2026-02-05 11:31:44 -05:00
Taylor Wilsdon 13b6092cda jwt handling improvements 2026-02-05 11:17:59 -05:00
Taylor Wilsdon 9f16273cb8 Update README.md 2026-02-05 11:07:14 -05:00
gpminsuk 4f6b64c9bd Rename *.instructions.md to general.instructions.md 2026-02-04 16:39:06 -08:00
gpminsuk 3d8bacaf4f feat: Add USER_GOOGLE_EMAIL to server instructions for single-user mode
When USER_GOOGLE_EMAIL environment variable is set, include it in the MCP
server instructions so that AI clients know which email to use for
Google Workspace tools without asking the user.

This improves the experience for desktop apps that handle OAuth externally
and pass credentials via GOOGLE_MCP_CREDENTIALS_DIR + USER_GOOGLE_EMAIL.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 12:35:42 -08:00
Arno a8ed232050 fix: apply ruff formatting to sheets formatting feature
Fixed formatting issues in:
- gcalendar/calendar_tools.py
- gsheets/sheets_tools.py
- tests/gsheets/test_format_sheet_range.py

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-04 09:16:10 +00:00
Alexander 75eb8fa182 External oauth bugfix (#7)
* external oauth bugfix

* cleanup for non-essential expiry logic

* default session time addition

* ruff audit
2026-02-03 14:01:16 -05:00
Ugo Anomelechi 4cecad7d8c docs: add format_sheet_range to main README.md 2026-02-02 14:22:49 +00:00
Ugo Anomelechi 6c2a4a8127 feat(sheets): add text wrapping, alignment, and font formatting to format_sheet_range
Extends format_sheet_range with new parameters:
- wrap_strategy: WRAP, CLIP, OVERFLOW_CELL
- horizontal_alignment: LEFT, CENTER, RIGHT
- vertical_alignment: TOP, MIDDLE, BOTTOM
- bold: boolean for bold text
- italic: boolean for italic text
- font_size: integer for font size in points

All parameters work alongside existing color and number format options.
Includes 21 unit tests covering all new functionality.
Added to extended tier in tool_tiers.yaml.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 14:18:53 +00:00
xuiltul 57daf2ab30 fix: use absolute path for attachment storage and improve filename resolution
Fixes #327

- Use absolute path (~/.workspace-mcp/attachments/) instead of relative
  ./tmp/attachments to avoid polluting working directories
- Make storage directory configurable via WORKSPACE_ATTACHMENT_DIR env var
- Return file path from save_attachment() instead of UUID for direct
  filesystem access (useful in stdio mode where HTTP URLs are unavailable)
- Preserve original filenames with UUID suffix for uniqueness
- Use format="full" instead of format="metadata" when fetching attachment
  info, as metadata format doesn't include attachmentId in parts
- Add multi-level filename matching: exact attachmentId → size-based
  fallback → single-attachment fallback (handles ephemeral IDs)
2026-02-02 16:43:34 +09:00
Taylor Wilsdon 802ea7861c Update README.md 2026-02-01 18:01:57 -05:00
Taylor Wilsdon 3c1fb7ac55 Update README.md 2026-02-01 15:42:04 -05:00
Taylor Wilsdon a95e6d1d83 dxt 2026-02-01 15:38:57 -05:00
Taylor Wilsdon 47190df2df chore: release v1.9.0 2026-02-01 15:37:36 -05:00
Taylor Wilsdon 4bc30960ef Merge pull request #324 from leolln/feat/docs-styling-and-import
feat(docs,drive): add styling tools and import_to_google_doc
2026-02-01 14:53:12 -05:00
Taylor Wilsdon 0bbb8ec4da readme 2026-02-01 14:52:23 -05:00
Taylor Wilsdon 57e1d41c55 refac into single component 2026-02-01 14:47:32 -05:00
Taylor Wilsdon 1197518473 ruff 2026-02-01 12:07:00 -05:00
Taylor Wilsdon cfab4a59f7 remove leo stuff 2026-02-01 12:06:49 -05:00
Taylor Wilsdon f8748ccd10 uv 2026-02-01 11:51:25 -05:00
Taylor Wilsdon 4610bc3566 Merge pull request #413 from taylorwilsdon/feature/add-host-argument
enh: Add configurable host env var
2026-02-01 11:47:57 -05:00
Taylor Wilsdon d7e92cc90c Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into feature/add-host-argument 2026-02-01 11:34:23 -05:00
Taylor Wilsdon c1bcff95a9 refac to env var 2026-02-01 11:34:21 -05:00
Taylor Wilsdon 04ff5b40b5 Merge pull request #412 from taylorwilsdon/cli_mode
feat: CLI mode for full Workspace control
2026-02-01 11:33:06 -05:00
Taylor Wilsdon 6be03d62ab refac 2026-02-01 11:31:26 -05:00
Taylor Wilsdon f8f50a45e3 ruff 2026-02-01 11:28:13 -05:00
Taylor Wilsdon 50fb570c69 start minimal server on invocation 2026-02-01 11:27:08 -05:00
Taylor Wilsdon e8c929e5e4 Merge main into cli_mode: resolve conflict keeping both --cli and --read-only args 2026-02-01 11:21:27 -05:00
Taylor Wilsdon 1c539ff9f7 add cli mode 2026-02-01 11:20:17 -05:00
Taylor Wilsdon ef8f09ad65 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into feature/add-host-argument 2026-02-01 11:06:04 -05:00
Taylor Wilsdon c02904c7c4 Merge pull request #334 from DixonDs/feature/read-only-mode
feat: implement --read-only mode with tool filtering
2026-02-01 11:05:36 -05:00
Taylor Wilsdon a23ef1135b ruff 2026-02-01 10:56:02 -05:00
Taylor Wilsdon b2c7cf55f5 refac 2026-02-01 10:54:59 -05:00
Taylor Wilsdon 9e5832053c readme 2026-02-01 10:44:34 -05:00
Roland Huß a1c5c63ca0 Add --host argument for configurable bind address
Add a --host command line argument to allow configuring which address
the HTTP server binds to. This is useful for containerized deployments
where a TLS-terminating sidecar (like nginx) handles external traffic,
and the MCP server should only be accessible via localhost.

Use case: Kubernetes deployment with nginx sidecar for HTTPS termination.
The MCP server binds to 127.0.0.1 while nginx handles TLS on the pod's
external interface, providing defense-in-depth security.

Default behavior remains unchanged (0.0.0.0).

Assisted-By: Claude Code
2026-02-01 10:32:17 +01:00
Taylor Wilsdon eca3444777 merge upstream 2026-01-31 13:14:27 -05:00
Taylor Wilsdon 4dfcf8d69c Merge pull request #407 from chetan/fix/service-mem-leak
fix/service mem leak
2026-01-30 12:45:16 -05:00
Taylor Wilsdon 6cf5911e9f Create *.instructions.md 2026-01-30 11:56:08 -05:00
Taylor Wilsdon d4c55795b1 dxt 2026-01-30 11:39:54 -05:00
Taylor Wilsdon 5394bfa5d5 chore: release v1.8.3 2026-01-30 11:39:08 -05:00
Taylor Wilsdon 390931c8c5 Merge pull request #352 from peterhartree/feat/gmail-from-name
feat(gmail): Add from_name parameter for sender display name
2026-01-30 11:38:50 -05:00
Taylor Wilsdon ddcc45d026 ruff 2026-01-30 10:47:54 -05:00
Taylor Wilsdon 7bf67ecbb9 feedbvack 2026-01-30 10:43:04 -05:00
Taylor Wilsdon 7910cfe6a3 rfc 5322 2026-01-30 10:33:49 -05:00
Chetan Sarva da182ed39d cleanup: ruff 2026-01-30 10:27:11 -05:00
Taylor Wilsdon 054780664d ruff 2026-01-30 10:20:05 -05:00
Chetan Sarva 59873342e9 fix: memory leak in external OAuth 2.1 session storage
In external OAuth 2.1 mode, skip session storage entirely.
The access token arrives fresh with every request from the external
provider, there's no refresh_token, and the mcp_session_id is
ephemeral (new UUID per request in stateless mode). Storing these
transient tokens creates unbounded dict growth (memory leak) with
entries that are never cleaned up or reused.

Credit to @ljagiello in PR #383
Co-authored-by: lukasz@jagiello.org
2026-01-30 10:17:22 -05:00
Taylor Wilsdon e12599773c Merge pull request #386 from karbassi/feat/contacts-api
feat: add Google Contacts (People API) support
2026-01-30 10:11:36 -05:00
Taylor Wilsdon 238b9a6830 add readme 2026-01-30 10:10:44 -05:00
Taylor Wilsdon 99e86d0198 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feat/contacts-api 2026-01-30 10:04:17 -05:00
Chetan Sarva 37d1256efc fix: always close services (to avoid mem leaks) 2026-01-30 10:03:44 -05:00
Taylor Wilsdon c5fd6a2b7f Merge pull request #406 from chetan/fix/external-auth-token
fix: subclass AccessToken with custom fields
2026-01-30 10:03:30 -05:00
Taylor Wilsdon c60f679a3f cleanup 2026-01-30 10:02:54 -05:00
Taylor Wilsdon 61e91cd4d1 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into fix/external-auth-token 2026-01-30 09:47:48 -05:00
Taylor Wilsdon 663950eeaf Update README.md 2026-01-30 09:05:14 -05:00
Taylor Wilsdon 6cbe8e266a Update README.md 2026-01-30 09:04:55 -05:00
Taylor Wilsdon 6eb39b9266 Update README.md 2026-01-30 09:04:38 -05:00
Taylor Wilsdon 0fcec83579 Update README.md 2026-01-30 09:04:00 -05:00
Taylor Wilsdon cac3378cf6 Merge pull request #381 from songmeo/main
Send emails with attachments
2026-01-29 19:44:35 -05:00
Taylor Wilsdon 46eeeb6524 fixes 2026-01-29 19:43:21 -05:00
Taylor Wilsdon 736f2756d6 fixes 2026-01-29 19:43:09 -05:00
Taylor Wilsdon e99479b63c ruff 2026-01-29 19:23:23 -05:00
Taylor Wilsdon 3246f21ef0 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into songmeo/main 2026-01-29 19:22:48 -05:00
Chetan Sarva 6cdbc7706a fix: subclass AccessToken with custom fields 2026-01-29 16:06:00 -05:00
Taylor Wilsdon 24dd57a8ad fix yaml format 2026-01-29 12:31:43 -05:00
Taylor Wilsdon 32c4a99af4 dxt 2026-01-29 11:22:25 -05:00
Taylor Wilsdon 068657b8d8 chore: release v1.8.2 2026-01-29 11:21:48 -05:00
Taylor Wilsdon ae2d75ad0b Merge pull request #405 from taylorwilsdon/external_oauth-fix
fix: authorization resource for EXTERNAL_OAUTH21_PROVIDER=true
2026-01-29 11:12:01 -05:00
Taylor Wilsdon 0d8dc4c935 merge 2026-01-29 10:59:09 -05:00
Taylor Wilsdon 8bfbeca1e3 cleanup 2026-01-29 10:51:37 -05:00
Taylor Wilsdon a96ad430ff add checks for maintainer access and PR template 2026-01-29 10:51:37 -05:00
Ugo Anomelechi d7c6e35c0e docs: Add batch_update_form to tool tiers and README documentation
Add batch_update_form to the Complete tier in tool_tiers.yaml and
document it in both README files as requested in PR review.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 10:51:37 -05:00
Ugo Anomelechi 47959d2ac7 feat(forms): Add batch_update_form tool for Google Forms API
Add batch_update_form MCP tool that exposes the Google Forms
batchUpdate API endpoint. Supports createItem, updateItem,
deleteItem, moveItem, updateFormInfo, and updateSettings operations.

Includes _batch_update_form_impl internal function for testability
and 6 unit tests covering multiple requests, single request, empty
replies, missing replies key, URL generation, and mixed reply types.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 10:51:37 -05:00
ryo 1c559dca6b Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-29 10:51:37 -05:00
Taylor Wilsdon 6464c3c123 Merge pull request #390 from ugoano/feature/forms-batch-update
feat(forms): Add batch_update_form tool for Google Forms API
2026-01-28 16:54:11 -05:00
Taylor Wilsdon 0ddc73149b pull in main 2026-01-28 16:48:46 -05:00
Taylor Wilsdon 47b7e5f5cb Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feature/forms-batch-update 2026-01-28 16:48:38 -05:00
Taylor Wilsdon 051c9d7c11 add checks for maintainer access and PR template 2026-01-28 16:47:14 -05:00
Taylor Wilsdon 6bb10b2596 ruff 2026-01-28 16:39:53 -05:00
ryo de461c7c7f fix the authorization resource for EXTERNAL_OAUTH21_PROVIDER=true 2026-01-28 16:23:14 -05:00
Taylor Wilsdon 94825ac415 dxt 2026-01-28 14:32:59 -05:00
Taylor Wilsdon 9f159083f9 chore: release v1.8.1 2026-01-28 14:30:15 -05:00
Taylor Wilsdon f08aa39101 Merge pull request #400 from taylorwilsdon/fastmcp_oauth_fix
fix: fix for fastmcp v2.14.4 + oauth access token retrieval
2026-01-28 14:29:44 -05:00
Taylor Wilsdon f36bcdd335 ruff 2026-01-28 14:28:28 -05:00
Taylor Wilsdon e4edc111df fix 2026-01-28 14:22:02 -05:00
Taylor Wilsdon 7da6f34fc7 ruff fmt 2026-01-28 14:20:17 -05:00
Taylor Wilsdon 5365584efd simplify flow 2026-01-28 14:12:37 -05:00
Taylor Wilsdon d74d31ced7 ruff 2026-01-28 13:07:03 -05:00
Taylor Wilsdon e7fe1ef2f9 remove unused import 2026-01-28 13:01:16 -05:00
Taylor Wilsdon e9ff13f385 reorder 2026-01-28 12:59:58 -05:00
Taylor Wilsdon ca627c857f fix for fastmcp v2.14.4 2026-01-28 12:55:27 -05:00
Taylor Wilsdon 2442736749 Merge pull request #399 from adrianlaureda/fix/tool-tiers-yaml-indentation
Fix YAML indentation error in tool_tiers.yaml
2026-01-28 12:00:40 -05:00
Huong Pham fe497a86fe Merge branch 'main' into main 2026-01-28 13:39:37 +02:00
adrianlaureda 4b44ed5a6d Fix YAML indentation error in tool_tiers.yaml
The `extended` key under `calendar` was missing proper indentation,
causing YAML parsing errors when loading tools with `--tool-tier complete`.

Fixes #398
2026-01-28 07:37:19 +01:00
Taylor Wilsdon 5fac9beb51 add dxt 2026-01-27 20:12:52 -05:00
Taylor Wilsdon fbb90fe2f5 chore: release v1.8.0 2026-01-27 20:11:51 -05:00
Taylor Wilsdon dba9cb6c21 Merge pull request #349 from jrank/feature/freebusy-api
Add FreeBusy API support to Google Calendar tools
2026-01-27 20:10:51 -05:00
Ugo Anomelechi b7a2f08a76 docs: Add batch_update_form to tool tiers and README documentation
Add batch_update_form to the Complete tier in tool_tiers.yaml and
document it in both README files as requested in PR review.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 00:54:47 +00:00
Taylor Wilsdon 1f1a8ff977 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp 2026-01-27 19:32:48 -05:00
Taylor Wilsdon 53109b9a50 update readme and block single user mode + oauth to avoid user confusion 2026-01-27 19:32:45 -05:00
Taylor Wilsdon 8c007e2a9b Update core/tool_tiers.yaml 2026-01-27 19:31:58 -05:00
Taylor Wilsdon 4a9f574d23 Merge pull request #350 from jrank/feature/guest-permissions
Add guest permission controls to calendar events
2026-01-27 19:29:01 -05:00
Taylor Wilsdon 2463778deb disclaimers 2026-01-27 19:20:52 -05:00
Taylor Wilsdon 8184a948ca Merge pull request #394 from taylorwilsdon/pr_fix_start_google_oauth
enh: Remove start_google_auth when OAuth2.1 enabled
2026-01-27 18:48:23 -05:00
Taylor Wilsdon 4ced1c42d0 cleanup 2026-01-27 18:48:07 -05:00
Taylor Wilsdon be0308eba8 fix 2026-01-27 18:41:32 -05:00
Taylor Wilsdon cea593ecb2 Merge pull request #393 from taylorwilsdon/issues/380
fix: issues/380
2026-01-27 17:59:03 -05:00
Taylor Wilsdon 7a3ba9aa47 ensures that when OAuth tokens expire or are revoked, FastMCP will properly receive a GoogleAuthenticationError exception 2026-01-27 17:57:59 -05:00
Taylor Wilsdon d0b1bccc8a Merge pull request #392 from taylorwilsdon/issues/362
enh: Copy Drive File - supports any drive file
2026-01-27 17:50:24 -05:00
Taylor Wilsdon 76a6ec7b8e Update gdrive/drive_tools.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-27 17:49:00 -05:00
Taylor Wilsdon ec7a55dc11 update readme, tool tiers 2026-01-27 17:46:09 -05:00
Taylor Wilsdon ea9405ebe4 add copy functionality 2026-01-27 17:44:20 -05:00
Taylor Wilsdon ce81f725c7 Merge pull request #391 from taylorwilsdon/copilot/fix-pdf-export-issue
Add PDF export support for Google Sheets
2026-01-27 17:23:58 -05:00
copilot-swe-agent[bot] 5c1fe04f16 Add PDF export support for Google Sheets
Co-authored-by: taylorwilsdon <6508528+taylorwilsdon@users.noreply.github.com>
2026-01-27 22:20:02 +00:00
copilot-swe-agent[bot] 72455b22bc Initial plan 2026-01-27 22:17:50 +00:00
Taylor Wilsdon ef820972aa Merge pull request #388 from taylorwilsdon/dependabot/uv/uv-3adca6f4ae
Bump the uv group across 1 directory with 2 updates
2026-01-27 17:01:06 -05:00
Ugo Anomelechi 134cffc88e feat(forms): Add batch_update_form tool for Google Forms API
Add batch_update_form MCP tool that exposes the Google Forms
batchUpdate API endpoint. Supports createItem, updateItem,
deleteItem, moveItem, updateFormInfo, and updateSettings operations.

Includes _batch_update_form_impl internal function for testability
and 6 unit tests covering multiple requests, single request, empty
replies, missing replies key, URL generation, and mixed reply types.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:47:47 +00:00
dependabot[bot] 5ff1ead0fb Bump the uv group across 1 directory with 2 updates
Bumps the uv group with 2 updates in the / directory: [protobuf](https://github.com/protocolbuffers/protobuf) and [python-multipart](https://github.com/Kludex/python-multipart).


Updates `protobuf` from 6.33.2 to 7.34.0rc1
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Commits](https://github.com/protocolbuffers/protobuf/commits)

Updates `python-multipart` from 0.0.21 to 0.0.22
- [Release notes](https://github.com/Kludex/python-multipart/releases)
- [Changelog](https://github.com/Kludex/python-multipart/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Kludex/python-multipart/compare/0.0.21...0.0.22)

---
updated-dependencies:
- dependency-name: protobuf
  dependency-version: 7.34.0rc1
  dependency-type: indirect
  dependency-group: uv
- dependency-name: python-multipart
  dependency-version: 0.0.22
  dependency-type: indirect
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-27 00:10:27 +00:00
Ali Karbassi eed562bf9f feat: add Google Contacts (People API) support
Add 16 MCP tools for managing Google Contacts via the People API:

Core tier:
- list_contacts, get_contact, search_contacts, create_contact

Extended tier:
- update_contact, delete_contact, list_contact_groups, get_contact_group

Complete tier:
- batch_create_contacts, batch_update_contacts, batch_delete_contacts
- create_contact_group, update_contact_group, delete_contact_group
- modify_contact_group_members

Includes:
- OAuth scopes for contacts and contacts.readonly
- People API service configuration
- Tool tier definitions
- Unit tests for helper functions
2026-01-25 01:13:49 -06:00
Song Meo 5df04b6d28 Merge upstream/main: integrate Send As feature with attachment support 2026-01-23 20:24:37 +02:00
Song Meo 7a724650b3 Fix docstring to match Optional type annotation for attachments 2026-01-23 20:21:00 +02:00
Song Meo 2266e7da58 Address Copilot review: sanitize filename and fix mutable default 2026-01-23 20:16:55 +02:00
Song Meo 21bac3a713 Fix attachment parameter type inconsistency in send_gmail_message 2026-01-23 20:12:42 +02:00
owengo 57d140d5aa Update core/tool_registry.py
Copilot fix

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-23 18:40:17 +01:00
Taylor Wilsdon af17085509 Merge pull request #379 from martinschenk/feature/gmail-send-as-support
feat(gmail): Add Send As support for send_gmail_message and draft_gmail_message
2026-01-23 12:20:39 -05:00
Song Meo edeeaa82bc Add attachment support to Gmail send and draft functions
- Add file path and base64 content attachment support
- Auto-detect MIME types from file extensions
- Support attachments in both send_gmail_message and draft_gmail_message
- Accept attachments via 'path' (file path) or 'content' (base64) + 'filename'
- Note: FastMCP schema generation issue prevents List[Dict] from appearing in MCP tool schema
2026-01-23 02:33:58 +02:00
Song Meo c2ddb2efaf feat(drive): add PDF export support for Google Sheets
- Add export_format='pdf' option for Google Sheets in get_drive_file_download_url
- Previously only supported csv and xlsx formats for Sheets
- Update docstring and parameter documentation
- Tested with production Google Sheet and confirmed working
2026-01-23 02:33:58 +02:00
Martin Schenk e78fecd8c1 feat(gmail): Add Send As support for send_gmail_message and draft_gmail_message
- Add optional from_email parameter to send_gmail_message
- Add optional from_email parameter to draft_gmail_message
- Allows sending/drafting from configured Gmail Send As aliases
- Falls back to authenticated user email if not specified
- Requires Send As alias to be configured in Gmail settings (Settings > Accounts > Send mail as)
- Updated docstrings with new parameter documentation and examples

This enables users to send emails from different email addresses configured
in their Gmail "Send mail as" settings, which is useful for users who manage
multiple email identities through a single Gmail account.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 19:35:55 +01:00
Taylor Wilsdon e6e8aba754 Merge pull request #377 from jonhearsch/claude/fix-gmail-filters-tool-tiers-C2iS6
fix: Add missing Gmail filter tools to tool_tiers.yaml
2026-01-22 13:35:51 -05:00
Taylor Wilsdon a377c15848 Merge pull request #378 from taylorwilsdon/dependabot/uv/uv-0ade37cc74
Bump the uv group across 1 directory with 2 updates
2026-01-22 13:34:43 -05:00
Taylor Wilsdon a27aa96f84 Merge pull request #374 from cvrt-gmbh/main
fix: respect WORKSPACE_MCP_CREDENTIALS_DIR for multi-account support
2026-01-22 13:34:28 -05:00
cvrt-jh 8d291018e8 Delete PROGRESS.md 2026-01-22 18:48:50 +01:00
cvrt-jh bbef6d5ec1 Delete AGENTS.md 2026-01-22 18:48:38 +01:00
dependabot[bot] dccb8bc8c1 Bump the uv group across 1 directory with 2 updates
Bumps the uv group with 2 updates in the / directory: [pyasn1](https://github.com/pyasn1/pyasn1) and [urllib3](https://github.com/urllib3/urllib3).


Updates `pyasn1` from 0.6.1 to 0.6.2
- [Release notes](https://github.com/pyasn1/pyasn1/releases)
- [Changelog](https://github.com/pyasn1/pyasn1/blob/main/CHANGES.rst)
- [Commits](https://github.com/pyasn1/pyasn1/compare/v0.6.1...v0.6.2)

Updates `urllib3` from 2.6.2 to 2.6.3
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.6.2...2.6.3)

---
updated-dependencies:
- dependency-name: pyasn1
  dependency-version: 0.6.2
  dependency-type: indirect
  dependency-group: uv
- dependency-name: urllib3
  dependency-version: 2.6.3
  dependency-type: indirect
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-22 17:45:57 +00:00
Taylor Wilsdon 0c09710aeb Merge pull request #357 from sam-ent/feature/apps-script-integration
Add Google Apps Script API integration
2026-01-22 12:44:52 -05:00
Claude 39c9faca1b fix: Add missing Gmail filter tools to tool_tiers.yaml
The list_gmail_filters, create_gmail_filter, and delete_gmail_filter
tools were implemented in gmail_tools.py but not exposed in the
tool_tiers.yaml configuration, causing them to be filtered out when
using the tier-based tool loading system.

Also added get_gmail_attachment_content which was similarly missing.

Changes:
- Added get_gmail_attachment_content to extended tier
- Added list_gmail_filters to extended tier
- Added create_gmail_filter to extended tier
- Added delete_gmail_filter to extended tier
- Removed duplicate get_gmail_attachment_content entry
2026-01-22 04:59:58 +00:00
cvrt-jh 5c26b9f815 docs: update progress with PR status and cleanup todos 2026-01-20 21:39:16 +01:00
cvrt-jh e930874ed9 docs: add project documentation and progress tracking 2026-01-20 17:12:12 +01:00
cvrt-jh e98bb7115d fix: respect WORKSPACE_MCP_CREDENTIALS_DIR for multi-account support
- Add WORKSPACE_MCP_CREDENTIALS_DIR as primary env var (preferred)
- Keep GOOGLE_MCP_CREDENTIALS_DIR for backward compatibility
- Add os.path.expanduser() to handle ~ in paths
- Add logging to show which credentials directory is being used
- Display credentials directory in startup configuration

This enables running multiple MCP instances with different Google
accounts by configuring separate credential directories.

Fixes #373
2026-01-20 17:07:01 +01:00
leolln c22ca65736 chore: update uv.lock after rebase to v1.7.1
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-16 17:49:13 +00:00
leolln a9567b6f17 feat: add leo custom tier for personalized tool selection
- Add 'leo' tier as standalone (non-cumulative) tier
- Configure leo tier with curated tools for gmail, drive, docs, slides
- Updated tool_tier_loader to support standalone tiers
- Removed deprecated tools from leo tier (format_text_style, create_list, remove_list_formatting)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-16 17:49:13 +00:00
leolln 08f8ad5265 refactor(docs): remove redundant formatting tools
Per maintainer feedback (@taylorwilsdon):
- Delete format_text_style (redundant with modify_doc_text)
- Delete create_list (redundant with insert_doc_elements)
- Delete remove_list_formatting (use batch_update_doc)
- Delete _hex_to_rgb helper (use existing _normalize_color)

Preserved unique tools:
- format_paragraph_style (paragraph-level properties)
- apply_heading_style (named styles H1-H6)
- import_to_google_doc (new import feature)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-16 17:47:28 +00:00
leolln 6678b96d65 feat(docs,drive): add styling tools and import_to_google_doc
Google Docs styling tools:
- format_text_style: Rich text formatting (bold, italic, underline, colors, fonts)
- format_paragraph_style: Paragraph formatting (alignment, spacing, indentation)
- apply_heading_style: Apply H1-H6 heading styles using namedStyleType
- create_list: Convert paragraphs to bullet/numbered lists with visual indentation
- remove_list_formatting: Remove list formatting from paragraphs

Google Drive import tool:
- import_to_google_doc: Import files (MD, DOCX, TXT, HTML, RTF, ODT) as native
  Google Docs with automatic format conversion by Google Drive

Security:
- SSRF protection for file_url parameter (blocks localhost and private IPs)

All tools include input validation, error handling, and comprehensive docstrings.
2026-01-16 17:47:28 +00:00
sam-ent 03c48c054a style: fix ruff lint errors and format 2026-01-15 21:01:45 +00:00
sam-ent 818efdc0b8 Add version management, metrics, and trigger code generation tools
New tools added:
- delete_script_project: Full CRUD support for script projects
- list_versions: List all versions of a script
- create_version: Create immutable version snapshots
- get_version: Get details of a specific version
- get_script_metrics: Get execution analytics (active users, executions, failures)
- generate_trigger_code: Generate Apps Script code for time-based and event triggers

Changes:
- Updated auth/scopes.py with script.metrics scope and drive.file for delete
- Updated core/tool_tiers.yaml with new tools in core and extended tiers
- Updated gappsscript/README.md with new features documentation
- Added 8 new unit tests (18 total)

This brings total Apps Script tools from 11 to 17, covering the complete REST API.
2026-01-15 05:54:01 +00:00
sam-ent 58efda24eb Fix unit test mock and remove unused variables
- Fix test_create_deployment to mock versions().create() call
- Remove unused process_type and user_access_level variables
2026-01-14 01:01:36 +00:00
sam-ent 089e5a088c Add missing OAuth scopes and improve documentation
Changes:
- Add script.processes and drive.readonly scopes to SCRIPT_SCOPES
  (required for list_script_processes and list_script_projects)
- Update README.md with detailed Google Cloud setup instructions
- Add run_script_function API Executable deployment documentation
- Create TESTING.md with unit test and E2E testing guides
- Update manual_test.py to use configurable credential paths
- Add headless Linux authentication flow documentation
2026-01-14 01:01:36 +00:00
sam-ent aa07177230 Update unit test for list_script_projects Drive API change
The function now uses Drive API (files.list) instead of Script API
(projects.list), so the mock needs to reflect this change.
2026-01-14 01:01:36 +00:00
sam-ent d25b8b4a1c Fix Apps Script issues found during E2E testing
apps_script_tools.py:
- list_script_projects: Use Drive API instead of non-existent Script API method
- create_deployment: Create version first before creating deployment

manual_test.py:
- Add headless OAuth flow for CLI testing
- Add appsscript.json manifest to test files
- Add required scopes (drive.readonly, openid)
- Use _impl functions to bypass FastMCP decorators
- Build separate services for Drive and Script APIs

E2E test results: 6/8 tests pass
- List Projects requires Drive API enabled
- Run Function requires manual API Executable deployment setup
2026-01-14 01:01:36 +00:00
sam-ent 12dca1e750 Fix Apps Script integration with main server
- Add appscript to --tools CLI choices, tool_imports, and tool_icons
- Add script service to SERVICE_CONFIGS in service_decorator
- Add script scope imports and SCOPE_GROUPS mappings
- Fix variable shadowing in _get_script_project_impl

These changes complete the Apps Script integration by adding the
missing wiring in main.py and service_decorator.py that was needed
to make the feature functional.
2026-01-13 22:11:35 +00:00
sam-ent 800c4340b7 Enhance Apps Script documentation with value proposition and examples
README.md:
- Updated Apps Script bullets to emphasize value (automation, debugging, bridging services)

README_NEW.md:
- Added Apps Script to main tagline
- Added complete Apps Script tool table (11 tools)
- Included brief description and trigger limitation note

gappsscript/README.md:
- NEW: Why Apps Script section with comparison table
- NEW: Complete workflow example (form submission automation)
- NEW: AI agent workflow pattern (inspect, analyze, propose, update, deploy, monitor)
- NEW: Limitations & Non-Goals section (triggers, debugging, IDE features)
- ENHANCED: Common Workflows with 4 detailed examples including conversational flow
- ENHANCED: References section with comprehensive Google documentation links

Key additions:
- Emphasizes AI makes Apps Script accessible without coding
- Shows strategic value (automation glue vs individual APIs)
- Provides complete narrative examples
- Honest about limitations and non-goals
- Links to all relevant Google documentation
2026-01-13 21:43:41 +00:00
sam-ent 003f69e0a4 Refactor Apps Script tools for testability
- Separated business logic from decorators by creating _impl functions
- Updated all 11 tools to use internal implementation functions
- Rewrote unit tests to test _impl functions directly
- All 10 unit tests now passing
- Fixed decorator mocking issues that caused 'FunctionTool not callable' errors
2026-01-13 20:18:50 +00:00
sam-ent fb951d6314 Add comprehensive tests and documentation for Apps Script
Testing:
- Created unit tests with mocked API responses (test_apps_script_tools.py)
- 20+ test cases covering all 11 tools
- Tests for success cases, edge cases, and error handling
- Created manual test script for real API testing (manual_test.py)

Documentation:
- Created gappsscript module README with usage examples
- Updated main README.md with Apps Script section
- Added Apps Script to features list
- Added Apps Script API to enable links
- Added complete tool reference table
- No em dashes or emojis per requirements

All documentation follows existing codebase style and patterns.
2026-01-13 19:29:44 +00:00
sam-ent f5702b32b8 Implement Google Apps Script integration
Core implementation:
- Added OAuth scopes for Apps Script API (auth/scopes.py)
- Created gappsscript module with 11 tools
- Implemented 6 core tools (list, get, create, update, run)
- Implemented 5 extended tools (deployments, processes)
- Added tool tier definitions to tool_tiers.yaml

Tools follow existing patterns:
- Async with asyncio.to_thread for API calls
- Proper decorator chain (@server.tool, @handle_http_errors, @require_google_service)
- Formatted string outputs for user readability
- Comprehensive logging

All tools tested for pattern compliance with existing codebase.
2026-01-13 19:20:40 +00:00
Olivier Schiavo 2cdc55ac7d fix_start_google_auth 2026-01-12 16:05:32 +01:00
Peter Hartree ead1229874 feat(gmail): Add from_name parameter for sender display name
Add optional from_name parameter to send_gmail_message and draft_gmail_message
functions. When provided, the From header is formatted as "Name <email>" instead
of just the email address.

This allows users to include their display name in sent emails, matching the
behaviour of composing emails directly in Gmail.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 19:14:27 +01:00
Jacob Rank 30e79181e0 Add guest permission controls to calendar events
- Add guests_can_modify, guests_can_invite_others, and guests_can_see_other_guests parameters to create_event and modify_event
- Allow control over whether attendees can modify events, invite others, and see other guests
- Defaults to None to use Google Calendar defaults
2026-01-09 10:57:38 -05:00
Jacob Rank 506820aa3b Add FreeBusy API support to Google Calendar tools
- Implement query_freebusy tool to query free/busy information for calendars
- Add support for time range queries with RFC3339 format
- Support multiple calendar queries in a single request
- Include optional parameters for group and calendar expansion limits
- Add tool to core tier in tool_tiers.yaml for essential availability checking
- Follow existing patterns for authentication, error handling, and logging
2026-01-09 10:06:03 -05:00
Ilia 0b0025ea2d Update GitHub Actions workflows: standardize action versions and add Docker publish workflow 2026-01-08 13:42:14 -08:00
Taylor Wilsdon 2b72c4508f Merge pull request #339 from DixonDs/pr/add-gmail-date-header
feat(gmail): Add Date header to message content tools
2026-01-07 12:12:18 -05:00
Taylor Wilsdon ca21ce73d0 Merge pull request #345 from taylorwilsdon/issues/343
fix: add attachment tool to tool tiers
2026-01-07 12:09:24 -05:00
Taylor Wilsdon a66fd8b71e add to tool tiers 2026-01-07 12:08:39 -05:00
Dmytro Dziuma 1957466c08 Add Date header to Gmail tools output and update docstrings.
- Update 'GMAIL_METADATA_HEADERS' to include 'Date'.
- Update 'get_gmail_message_content' to display the 'Date' field.
- Update 'get_gmail_messages_content_batch' to display the 'Date' field in both metadata and full formats.
- Update docstrings to include 'Date' and 'Message-ID' in Returns description.
2026-01-05 23:37:00 +00:00
Dmytro Dziuma 0d4394ae27 feat: implement --read-only mode with tool filtering
- Adds --read-only CLI flag to restrict OAuth scopes to read-only permissions
- Implements dynamic tool filtering to disable tools requiring write permissions when in read-only mode
- Updates auth/scopes.py to manage read-only scope mappings
- Enhances @require_google_service and handle_http_errors decorators to propagate scope metadata
- Updates documentation in README.md
2025-12-30 22:08:11 +00:00
Taylor Wilsdon a446b72104 dxt 2025-12-28 12:54:25 -08:00
Taylor Wilsdon 014a7d8adf chore: release v1.7.1 2025-12-28 12:53:17 -08:00
Taylor Wilsdon 517d0876a1 fix valkey optional dep 2025-12-28 12:52:40 -08:00
Taylor Wilsdon 3eb81e16b0 dxt update 2025-12-27 12:31:16 -08:00
Taylor Wilsdon e523a39773 chore: release v1.7.0 2025-12-27 12:30:00 -08:00
Taylor Wilsdon 81a7bce7a3 uv 2025-12-27 12:29:40 -08:00
Taylor Wilsdon f34f867a5e merge 2025-12-27 12:29:02 -08:00
Taylor Wilsdon bcd1cb6823 Merge pull request #328 from taylorwilsdon/pr_valkey_oauth_storage
enh: Pluggable Storage Backends, Valkey | Disk | Memory
2025-12-27 12:27:34 -08:00
Taylor Wilsdon 7d32e2b915 uv 2025-12-27 12:26:07 -08:00
Taylor Wilsdon 24f8f635cb Merge pull request #320 from DixonDs/feature/gmail-rfc822-id
feat(gmail): add RFC822 Message-ID support
2025-12-27 12:25:33 -08:00
Taylor Wilsdon fe27085d76 ruff 2025-12-27 12:24:39 -08:00
Taylor Wilsdon 7f34dd190c refac, helper function 2025-12-27 12:23:49 -08:00
Taylor Wilsdon cd2fd826c5 ruff 2025-12-27 12:20:26 -08:00
Taylor Wilsdon 2ee83177ac helper function 2025-12-27 12:16:58 -08:00
Taylor Wilsdon 736988a36d uv update 2025-12-27 12:09:53 -08:00
Taylor Wilsdon 70d4a234f9 ruff 2025-12-27 12:08:58 -08:00
Taylor Wilsdon c2318fb569 ruff 2025-12-27 12:08:09 -08:00
Taylor Wilsdon b95a87e15a add memory and disk storage backends, readme 2025-12-27 12:06:20 -08:00
Taylor Wilsdon 321d9eaef0 bump 2025-12-27 11:54:52 -08:00
Taylor Wilsdon 0f60bee263 bump 2025-12-27 11:54:02 -08:00
Taylor Wilsdon b5baead3ba Update gmail/gmail_tools.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-27 10:27:07 -08:00
Taylor Wilsdon cba6665a77 Merge pull request #323 from taylorwilsdon/issues/319
fix: resolve issues/319
2025-12-27 10:19:44 -08:00
Taylor Wilsdon f8bd398910 Merge pull request #325 from usiegj00/fix/export-doc-to-pdf-supports-all-drives
fix: remove invalid supportsAllDrives param from export_media()
2025-12-27 10:19:01 -08:00
Taylor Wilsdon bf4fc86989 Update gdocs/docs_tools.py 2025-12-27 10:18:18 -08:00
Taylor Wilsdon 7a26d4c128 Update gdocs/docs_tools.py 2025-12-27 10:18:13 -08:00
Taylor Wilsdon 1c9e51a831 pr fixes 2025-12-27 10:16:49 -08:00
Jonathan Siegel a4f0c66c55 fix: remove invalid supportsAllDrives param from export_media()
The Google Drive API export_media() method does not accept the
supportsAllDrives parameter (unlike get(), list(), create(), etc.).

This caused export_doc_to_pdf to fail with:
  "Got an unexpected keyword argument supportsAllDrives"

The fix removes the invalid parameter. File access for shared drives
is already validated by the preceding files().get() call which does
use supportsAllDrives=True.

Tested with Google Docs in shared drives - exports work correctly.
2025-12-26 21:19:32 +09:00
Taylor Wilsdon 05bd5ead5e resolve issues/319 2025-12-24 12:29:38 -08:00
Dmytro Dziuma 53a93948c6 feat(gmail): add RFC822 Message-ID support 2025-12-24 10:50:49 +00:00
Taylor Wilsdon 258ea58436 fastmcp deployment config 2025-12-23 08:35:52 -08:00
Olivier Schiavo a93d1885bd feat: valkey oauth storage for truly stateless oauth 2.1 proxy 2025-12-23 14:14:49 +01:00
Taylor Wilsdon 82703cffa8 safety pin 2025-12-22 12:33:49 -08:00
Taylor Wilsdon 844f8bfab1 pin version 2025-12-22 11:39:20 -08:00
Taylor Wilsdon ae5c1eab1e Merge pull request #318 from openwengo/pr_fix_color_2
fix: simplify color in modify_color
2025-12-22 09:29:12 -08:00
Olivier Schiavo 72999a1531 fix: simplify color in modify_color 2025-12-22 09:37:25 +01:00
Taylor Wilsdon 6417d9c14f Merge pull request #317 from taylorwilsdon/copilot/fix-get-gmail-attachment-error
Fix serve_attachment() TypeError on FastMCP custom_route with path parameters
2025-12-20 21:26:09 -08:00
copilot-swe-agent[bot] f016c87757 Fix serve_attachment() missing request argument error
Co-authored-by: taylorwilsdon <6508528+taylorwilsdon@users.noreply.github.com>
2025-12-21 05:08:17 +00:00
copilot-swe-agent[bot] e4226dd2b6 Initial plan 2025-12-21 05:03:41 +00:00
Taylor Wilsdon 61c38a7780 chore: release v1.6.3 2025-12-19 21:51:59 -08:00
Taylor Wilsdon 20965716c5 update dxt 2025-12-19 21:51:40 -08:00
Taylor Wilsdon 60ac812de3 Merge pull request #305 from jacks0n/feature/google-drive-permissions
Add Google Drive sharing and permission management tools
2025-12-20 00:49:19 -05:00
Taylor Wilsdon ca23ac4d7d fix issues/313 2025-12-19 21:47:48 -08:00
Taylor Wilsdon e91ee55242 fix imports 2025-12-19 21:47:02 -08:00
Taylor Wilsdon aa6b709c03 restore 2025-12-19 21:41:11 -08:00
Taylor Wilsdon 667d4f740d merge 2025-12-19 16:19:35 -05:00
Taylor Wilsdon 928bb7940a Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feature/google-drive-permissions 2025-12-19 16:19:31 -05:00
Taylor Wilsdon 428ec5bbc8 Merge pull request #314 from taylorwilsdon/html_fallback
enh: handle HTML-only emails elegantly
2025-12-19 16:16:11 -05:00
Taylor Wilsdon c8391d77b5 ruff 2025-12-19 16:13:01 -05:00
Taylor Wilsdon c945472f15 fix 2025-12-19 16:10:24 -05:00
Taylor Wilsdon db38f5156b ruff 2025-12-19 16:00:28 -05:00
Taylor Wilsdon 1a2ca23d3f fallback for html only messages 2025-12-19 15:58:45 -05:00
Taylor Wilsdon 2e72f66db0 Merge pull request #297 from openwengo/pr_sheet_errors
fix: read_sheet_values and modify_sheet_values give error details
2025-12-19 14:35:34 -05:00
Olivier Schiavo 24bdb7e974 fix: read_sheet_values and modify_sheet_values give error details for #ERROR cells (and all #xx error values) 2025-12-19 10:52:48 +01:00
Jackson Cooper 97284a3522 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feature/google-drive-permissions 2025-12-19 19:24:36 +11:00
Jackson Cooper a7208f3fb9 Fix ruff formatting issues
Apply ruff format to pass CI checks.
2025-12-19 19:12:31 +11:00
Taylor Wilsdon cdea5a5e65 Merge pull request #309 from openwengo/pr_fix_color_typing
fix: color typing
2025-12-18 12:56:06 -05:00
Olivier Schiavo c63021c530 fix: color typing 2025-12-16 10:26:20 +01:00
Jackson Cooper 32347d9543 Merge origin/main 2025-12-16 07:13:03 +11:00
Taylor Wilsdon 31a46348b5 package updates 2025-12-14 15:34:49 -05:00
Jackson Cooper 70bdaece23 Add Google Drive sharing and permission tools
New tools: share_drive_file, batch_share_drive_file, get_drive_shareable_link,
get_drive_file_permissions, update_drive_permission, remove_drive_permission,
transfer_drive_ownership

share_drive_file supports user/group/domain/anyone types, so there's no need
for a separate make_drive_file_public tool.
2025-12-14 18:03:04 +11:00
Taylor Wilsdon 267ad120c0 readme update 2025-12-13 20:00:12 -07:00
Taylor Wilsdon 37abc0b545 Merge pull request #304 from taylorwilsdon/dependabot/pip/pip-2d69776b52
Bump fastmcp from 2.12.5 to 2.13.0 in the pip group across 1 directory
2025-12-13 14:11:19 -08:00
dependabot[bot] 1738d88342 Bump fastmcp from 2.12.5 to 2.13.0 in the pip group across 1 directory
Bumps the pip group with 1 update in the / directory: [fastmcp](https://github.com/jlowin/fastmcp).


Updates `fastmcp` from 2.12.5 to 2.13.0
- [Release notes](https://github.com/jlowin/fastmcp/releases)
- [Changelog](https://github.com/jlowin/fastmcp/blob/main/docs/changelog.mdx)
- [Commits](https://github.com/jlowin/fastmcp/compare/v2.12.5...v2.13.0)

---
updated-dependencies:
- dependency-name: fastmcp
  dependency-version: 2.13.0
  dependency-type: direct:production
  dependency-group: pip
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-13 22:10:30 +00:00
Taylor Wilsdon d9f8fc8ae1 Create dependabot.yml 2025-12-13 14:10:03 -08:00
Taylor Wilsdon 03eaecc443 Create glama.json 2025-12-13 14:07:12 -08:00
Taylor Wilsdon 427062571f Merge pull request #303 from taylorwilsdon/ruff_format
enh: apply ruff formatting
2025-12-13 13:53:12 -08:00
Taylor Wilsdon 956e88e910 apply ruff formatting 2025-12-13 13:52:48 -08:00
Taylor Wilsdon 6b8352a354 apply ruff formatting 2025-12-13 13:49:28 -08:00
Taylor Wilsdon 1d80a24ca4 Merge pull request #302 from taylorwilsdon/codex/evaluate-and-implement-issue-299
Add Gmail filter CRUD tools
2025-12-13 13:48:41 -08:00
Taylor Wilsdon de53b6e804 deps 2025-12-13 13:48:18 -08:00
Taylor Wilsdon 23d2fb10b2 dxt 2025-12-13 13:47:41 -08:00
Taylor Wilsdon 2cbeaa5a13 Add Gmail filter management tools 2025-12-13 13:40:05 -08:00
Taylor Wilsdon 4c914b0de9 chore: release v1.6.2 2025-12-13 13:02:56 -08:00
Taylor Wilsdon 2434d3bc54 dxt 2025-12-13 13:02:43 -08:00
Taylor Wilsdon 30df07e54d Merge pull request #300 from taylorwilsdon/pr_doc_format
enh: Text & Background Color Formatting
2025-12-13 13:01:52 -08:00
Taylor Wilsdon b467c2c91c refac 2025-12-13 13:01:24 -08:00
Taylor Wilsdon 115bead29a refac 2025-12-13 12:57:00 -08:00
Taylor Wilsdon 5f59b4e9a7 fix imports 2025-12-13 11:21:35 -08:00
Taylor Wilsdon ad792921a0 validators 2025-12-13 11:11:04 -08:00
Taylor Wilsdon 1ed965926b merge 2025-12-13 10:50:51 -08:00
Taylor Wilsdon c615a6d743 Merge pull request #298 from openwengo/pr_tab_title 2025-12-12 13:11:51 -08:00
Josh Dzielak d5537f1230 Add get_drive_file_download_url tool for downloading Drive files via HTTP
Implements a new tool that follows the same pattern as Gmail attachment downloads:
- Downloads files from Google Drive (handles shortcuts automatically)
- For Google native files (Docs/Sheets/Slides), exports to useful formats:
  * Docs → PDF (default) or DOCX
  * Sheets → XLSX (default) or CSV
  * Slides → PDF (default) or PPTX
- Saves files to AttachmentStorage (reuses existing infrastructure)
- Returns a download URL that works with the existing /attachments/{file_id} route
- Files expire after 1 hour (same as Gmail attachments)
- Handles stateless mode gracefully

This enables agents to download binary files from Drive, which was previously
not possible with get_drive_file_content (text-only). The agent receives a
URL it can fetch to download the file, following the same pattern as Gmail
attachment downloads.
2025-12-12 12:41:21 -08:00
Taylor Wilsdon 4bf1274e39 Merge pull request #282 from openwengo/pr_sheet_format 2025-12-12 12:36:59 -08:00
Olivier Schiavo 16a14dab07 refactor 2025-12-12 18:55:16 +01:00
Olivier Schiavo 76378d583e feat: gsheet formatting + conditionnal formatting 2025-12-12 18:30:32 +01:00
Taylor Wilsdon 25211f3d74 Merge pull request #296 from durandom/feature/add-visibility-parameter
feat(gcalendar): Add visibility parameter to create_event and modify_event
2025-12-12 09:23:55 -08:00
Olivier Schiavo c528fe5bc4 fix: tab title 2025-12-12 16:07:51 +01:00
Marcel Hild 0e7f1af755 feat(gcalendar): Add visibility parameter to create_event and modify_event
- Add '_apply_visibility_if_valid' helper function for visibility validation
- Support 'default', 'public', 'private', and 'confidential' visibility values
- Add visibility parameter to create_event function with documentation
- Add visibility parameter to modify_event function with documentation
- Validates input and logs visibility setting or warning

Follows same pattern as transparency parameter (commit 148127e).

Closes #295
2025-12-12 09:52:12 +01:00
Taylor Wilsdon 9fa2455cc7 Merge pull request #284 from jhutar/read-slides-text
feat: Make get_presentation tool to also extract text in slides
2025-12-08 16:16:38 -05:00
Taylor Wilsdon e8a11514b6 chore: release v1.6.1 2025-12-08 10:06:12 -05:00
Taylor Wilsdon 9c63e0267c update dxt 2025-12-08 10:04:10 -05:00
Taylor Wilsdon 68c264003d Merge pull request #286 from joshed-io/feat/gmail-search-pagination
Add pagination for search_gmail_messages tool
2025-12-08 10:03:38 -05:00
Taylor Wilsdon 5ee1c19871 Update README.md
Add claude code docs
2025-12-08 09:54:51 -05:00
Taylor Wilsdon 3adcbcd0f6 Merge pull request #288 from joshed-io/feat/gmail-attachment-http-serving
Add HTTP URL-based Attachment Serving for Gmail Attachments
2025-12-08 09:49:36 -05:00
Taylor Wilsdon a60a556359 token refresh uses the embedded creds with optional client secret path 2025-12-08 09:35:40 -05:00
Taylor Wilsdon 216fd4246a Update gmail_tools.py 2025-12-08 09:22:28 -05:00
Josh Dzielak a30438bb83 Address Copilot review comments
- Add missing parentheses to .execute() method call
- Remove redundant pass statement after logger.debug
- Keep urlsafe_b64decode() for consistency with codebase convention

Note: Copilot suggested using b64decode() instead of urlsafe_b64decode(),
but the codebase consistently uses urlsafe_b64decode() for Gmail message
body data (lines 72, 87 in gmail_tools.py). We follow the existing
codebase convention for consistency.
2025-12-06 07:49:08 +01:00
Josh Dzielak d8204eb0df Fix ruff errors: remove unused imports 2025-12-06 07:43:08 +01:00
Josh Dzielak ee1db221af Add HTTP URL-based attachment serving for Gmail attachments
This commit implements a new feature that allows Gmail attachments to be
served via HTTP URLs instead of returning base64-encoded data in the tool
response. This avoids consuming LLM context window space and token budgets
for large attachments.

Architecture:
-------------
The implementation works in both stdio and streamable-http transport modes:

1. Temp File Storage (core/attachment_storage.py):
   - New AttachmentStorage class manages temporary file storage in ./tmp/attachments/
   - Uses UUID-based file IDs to prevent guessing/unauthorized access
   - Tracks metadata: filename, mime type, size, creation/expiration times
   - Files expire after 1 hour (configurable) with automatic cleanup support
   - Handles base64 decoding and file writing

2. HTTP Route Handlers:
   - Added /attachments/{file_id} route to main FastMCP server (streamable-http mode)
   - Added same route to MinimalOAuthServer (stdio mode)
   - Both routes serve files with proper Content-Type headers via FileResponse
   - Returns 404 for expired or missing attachments

3. Modified get_gmail_attachment_content():
   - Now saves attachments to temp storage and returns HTTP URL
   - Attempts to fetch filename/mimeType from message metadata (best effort)
   - Handles stateless mode gracefully (skips file saving, shows preview)
   - Falls back to base64 preview if file saving fails
   - URL generation respects WORKSPACE_EXTERNAL_URL for reverse proxy setups

Key Features:
-------------
- Works in both stdio and streamable-http modes (uses existing HTTP servers)
- Respects stateless mode (no file writes when WORKSPACE_MCP_STATELESS_MODE=true)
- Secure: UUID-based file IDs prevent unauthorized access
- Automatic expiration: Files cleaned up after 1 hour
- Reverse proxy support: Uses WORKSPACE_EXTERNAL_URL if configured
- Graceful degradation: Falls back to preview if storage fails

Benefits:
---------
- Avoids context window bloat: Large attachments don't consume LLM tokens
- Better performance: Clients can stream/download files directly
- More efficient: No need to decode base64 in client applications
- Works across network boundaries: URLs accessible from any client

The feature maintains backward compatibility - if file saving fails or stateless
mode is enabled, the function falls back to showing a base64 preview.
2025-12-04 16:37:10 +01:00
Josh Dzielak 470dcae813 Fix ruff errors: remove f-string prefix from strings without placeholders 2025-12-04 16:21:43 +01:00
Jan Hutar 77b2d1d694 feat: Get text from other shapes as well and address some other code review comments
Assisted-by: Gemini
2025-12-01 14:19:38 +01:00
Josh Dzielak 02c1f2ee01 Add pagination for search_gmail_messages tool 2025-11-29 14:45:05 +01:00
Taylor Wilsdon 0402b1a0b8 chore: release v1.6.0 2025-11-28 14:14:16 -05:00
Taylor Wilsdon 1ce2f068af Merge pull request #285 from taylorwilsdon/fix_require_multiple_services
fix: better approach for issues/244
2025-11-28 14:13:37 -05:00
Taylor Wilsdon 705cf20044 better approach 2025-11-28 13:53:34 -05:00
Jan Hutar af75926b25 feat: Make get_presentation tool to also extract text in slides 2025-11-28 17:04:06 +01:00
Olivier Schiavo 7e2f9cdd96 feat: use colors in gdocs 2025-11-27 17:26:35 +01:00
Kevin Littlejohn 252ebe482e Remove extra_fields from resolve_drive_item call
Removed the extra_fields parameter from resolve_drive_item call.
2025-11-27 17:26:22 +01:00
Kevin Littlejohn b43365df1d Fix formatting issue in drive_tools.py 2025-11-27 17:26:22 +01:00
Taylor Wilsdon 4a1eb2227a merge main 2025-11-27 17:26:22 +01:00
Kevin Littlejohn 2bd8dccaa6 Remove shortcut_resolution patch artifact 2025-11-27 17:26:22 +01:00
Kevin Littlejohn dfd925ba45 Handle Drive shortcuts transparently 2025-11-27 17:26:22 +01:00
Taylor Wilsdon 5183aef08e Merge pull request #272 from silarsis/main
Issue #269 - supporting shortcuts
2025-11-25 17:14:19 -05:00
Kevin Littlejohn c9d4cd803c Remove extra_fields from resolve_drive_item call
Removed the extra_fields parameter from resolve_drive_item call.
2025-11-25 13:43:48 +08:00
Kevin Littlejohn 6c06e90123 Fix formatting issue in drive_tools.py 2025-11-25 13:36:02 +08:00
Taylor Wilsdon 7936097b7b merge main 2025-11-16 14:22:06 -05:00
Taylor Wilsdon d470fbdd13 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into silarsis/main 2025-11-16 14:22:02 -05:00
Taylor Wilsdon bf99eabe0b Merge pull request #275 from taylorwilsdon/issues/274
fix: fix media calls
2025-11-12 12:00:06 -05:00
Taylor Wilsdon fd26e4037a fix media calls 2025-11-12 11:54:55 -05:00
Kevin Littlejohn cbeabb36a1 Remove shortcut_resolution patch artifact 2025-11-11 16:44:39 +08:00
Kevin Littlejohn 55dfba3d83 Handle Drive shortcuts transparently 2025-11-11 16:43:00 +08:00
Taylor Wilsdon 973f921c32 chore: release v1.5.5 2025-11-10 11:17:44 -05:00
Taylor Wilsdon 78a458b226 dxt update 2025-11-10 11:17:37 -05:00
Taylor Wilsdon d0faa593e9 Merge pull request #270 from yairwein/main
feat: Add support for file:// URLs in create_drive_file
2025-11-10 11:17:04 -05:00
Taylor Wilsdon 72dd6330b6 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into yairwein/main 2025-11-10 11:14:53 -05:00
Taylor Wilsdon f9fdb94529 add streamable http check 2025-11-10 11:13:47 -05:00
Taylor Wilsdon 9f969f05a5 ruff 2025-11-10 11:03:44 -05:00
Taylor Wilsdon b3efc76399 address feedback 2025-11-10 11:03:38 -05:00
Taylor Wilsdon 4c92a542da Merge pull request #266 from benjaminjackson/fix/add-to-cc-metadata-fields
fix(gmail): add To and Cc fields to message metadata responses
2025-11-10 10:56:16 -05:00
Taylor Wilsdon d8c0e719df Merge pull request #268 from cfdude/feat/update-drive-file-tool
feat(drive): add update_drive_file tool for comprehensive file metadata management
2025-11-10 10:55:49 -05:00
Taylor Wilsdon 902ca92bb6 address feedback 2025-11-10 10:54:38 -05:00
Yair Weinberger 12e2be0807 feat: Add support for file:// URLs in create_drive_file
Added ability to upload local files to Google Drive using file:// URL scheme
in the create_drive_file tool. This enables uploading files from /tmp and
other local paths without requiring HTTP/HTTPS hosting.

Changes:
- Added urllib.parse.urlparse and pathlib.Path imports
- Detect file:// URLs and read directly from local filesystem
- Validate file exists before attempting upload
- Updated docstring to reflect support for file://, http://, and https://
- Added error handling for unsupported URL schemes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 17:12:26 +00:00
Rob Sherman 541677388b feat(drive): implement update_drive_file function with OAuth scope fix
- Added comprehensive update_drive_file function to modify Google Drive file metadata
- Fixed OAuth scope issue by using 'drive_file' instead of non-existent 'drive_write'
- Supports moving files, renaming, updating descriptions, managing sharing permissions
- Includes support for custom properties and file status (starred/trashed)
- Updated README.md and tool_tiers.yaml documentation
- Successfully tested with all parameters

Fixes #220 (OAuth stdio mode authentication issues)
2025-11-05 22:58:44 -08:00
Benjamin Jackson ca61416acb fix(gmail): add To and Cc fields to message metadata responses
Previously, the metadataHeaders parameter only requested Subject and
From fields from the Gmail API, even though To and Cc are standard
metadata fields. This updates all metadata API calls to include To
and Cc in both single message and batch operations.

Changes:
- Updated metadataHeaders to include To, Cc in all API calls
- Extended _extract_headers() calls to request To, Cc
- Updated response formatting to display To, Cc fields
- Handles missing To/Cc gracefully with empty strings
- Updated docstrings to reflect new fields in responses

Affected functions:
- get_gmail_message_content() (gmail/gmail_tools.py:369-457)
- get_gmail_messages_content_batch() (gmail/gmail_tools.py:463-638)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 16:40:04 -05:00
Taylor Wilsdon c7b1a633d1 Merge pull request #264 from taylorwilsdon/all_drive_support
enh: All Drive API operations now include supportsAllDrives=True
2025-11-04 11:20:35 -05:00
Taylor Wilsdon 332bc9c9ae Update README.md 2025-11-04 11:17:00 -05:00
Taylor Wilsdon 9b873092b2 remove alldrives from comments 2025-11-04 11:02:20 -05:00
Taylor Wilsdon 01a0de105a trailing comma 2025-11-04 10:39:53 -05:00
Taylor Wilsdon 8363ae1c06 add additional bits 2025-11-04 10:36:49 -05:00
Taylor Wilsdon 24d79ab470 All Drive API operations now include supportsAllDrives=True 2025-11-04 10:19:37 -05:00
Taylor Wilsdon 7ac9087939 Update README.md 2025-11-03 12:21:20 -05:00
Taylor Wilsdon 2fc133ec5a Update README.md 2025-11-03 12:20:42 -05:00
Taylor Wilsdon a9625dd71a update dxt 2025-11-02 08:44:08 -05:00
Taylor Wilsdon e9e8c40ab7 chore: release v1.5.4 2025-11-02 08:43:15 -05:00
Taylor Wilsdon ee6242627b bump vers 2025-11-02 08:43:06 -05:00
Taylor Wilsdon 6691de4ccf chore: release v1.5.3 2025-11-02 08:42:57 -05:00
Taylor Wilsdon 64d4050bda Merge pull request #237 from olivermdb/fix-gmail-attachment-ephemeral-ids
Add Gmail attachment support with ephemeral ID handling
2025-11-02 08:40:18 -05:00
Taylor Wilsdon 3b9805a5b7 Merge pull request #248 from yairwein/main
feat: add external OAuth 2.1 provider mode for bearer token authentic…
2025-11-02 08:04:29 -05:00
Taylor Wilsdon 6833ebd70b populate synthetic token object 2025-11-02 08:03:50 -05:00
Taylor Wilsdon 39bea59f40 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into yairwein/main 2025-11-02 08:03:32 -05:00
Taylor Wilsdon 519434e7bd Merge pull request #249 from loserbcc/fix/gmail-from-header-bug
Fix: Gmail send_message now respects user_google_email for From header
2025-11-02 08:01:14 -05:00
Taylor Wilsdon c45ddeba7e Update README.md 2025-11-01 19:59:49 -04:00
LoserBcc 2d4a2baefd Fix: Gmail send_message now respects user_google_email for From header
## Problem
Emails sent via send_gmail_message were always showing as from a default
user account regardless of which account was specified in the
user_google_email parameter.

## Root Cause
The _prepare_gmail_message() function was not setting the From header in
the MIME message. Gmail API defaults to the primary send-as address when
no From header is provided.

## Solution
- Added from_email parameter to _prepare_gmail_message()
- Set From header explicitly: message["From"] = from_email
- Updated send_gmail_message() to pass user_google_email as from_email
- Updated draft_gmail_message() to pass user_google_email as from_email
- Capitalized MIME headers (Subject, From, To, Cc, Bcc) per conventions

## Testing
Verified emails now correctly show sender address for multiple accounts.
Each account now properly displays its own address in the From field.

Fixes multi-account email sending functionality.
2025-10-24 21:40:36 -04:00
Yair Weinberger 241f0987ae feat: add external OAuth 2.1 provider mode for bearer token authentication
Add support for external OAuth 2.1 provider mode where authentication
is handled by external systems that issue Google OAuth access tokens.

**Changes:**

1. **New Environment Variable: `EXTERNAL_OAUTH21_PROVIDER`**
   - Enables external OAuth mode when set to `true`
   - Requires `MCP_ENABLE_OAUTH21=true`
   - Disables protocol-level auth (MCP handshake/tools list work without auth)
   - Requires bearer tokens in Authorization headers for tool calls

2. **New File: `auth/external_oauth_provider.py`**
   - Custom provider extending FastMCP's GoogleProvider
   - Handles ya29.* Google OAuth access tokens
   - Validates tokens via google-auth library + userinfo API
   - Returns properly formatted AccessToken objects

3. **Modified: `auth/oauth_config.py`**
   - Add `external_oauth21_provider` config option
   - Validation that external mode requires OAuth 2.1
   - Helper methods for checking external provider mode

4. **Modified: `core/server.py`**
   - Use ExternalOAuthProvider when external mode enabled
   - Use standard GoogleProvider otherwise
   - Set server.auth = None for external mode (no protocol auth)

5. **Modified: `README.md`**
   - New "External OAuth 2.1 Provider Mode" section
   - Usage examples and configuration
   - Added to environment variables table

**How It Works:**
- MCP handshake and tools/list do NOT require authentication
- Tool calls require `Authorization: Bearer ya29.xxx` headers
- Tokens validated by calling Google's userinfo API
- Multi-user support via per-request authentication
- Stateless-compatible for containerized deployments

**Use Cases:**
- Integrating with existing authentication systems
- Custom OAuth flows managed by your application
- API gateways handling authentication upstream
- Multi-tenant SaaS with centralized auth
- Mobile/web apps with their own OAuth implementation

**Example Configuration:**
```bash
export MCP_ENABLE_OAUTH21=true
export EXTERNAL_OAUTH21_PROVIDER=true
export GOOGLE_OAUTH_CLIENT_ID=your_client_id
export GOOGLE_OAUTH_CLIENT_SECRET=your_client_secret
export WORKSPACE_MCP_STATELESS_MODE=true  # Optional
```

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-24 15:43:29 +03:00
Taylor Wilsdon ec41ba18c9 fix type hints 2025-10-23 14:49:47 -04:00
Taylor Wilsdon a14ee47ee8 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into fix-gmail-attachment-ephemeral-ids 2025-10-23 14:39:55 -04:00
Taylor Wilsdon 95d5c8b4ad remove mcpo 2025-10-19 16:18:42 -04:00
Taylor Wilsdon d4b7cab7ab update dxt 2025-10-19 16:17:06 -04:00
Taylor Wilsdon 8adc7527dd Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp 2025-10-19 15:33:02 -04:00
Taylor Wilsdon 1caecee035 Merge pull request #239 from shawnzhu/fix/file-download-upload
enh: tempfile downloads to save memory in non-stateless mode
2025-10-19 14:25:34 -04:00
Taylor Wilsdon 33a0938fb5 use that var 2025-10-19 14:24:06 -04:00
Taylor Wilsdon e35973c14d Wrapped the in-memory download path with MediaIoBaseUpload so Drive receives a proper upload object even when stateless (gdrive/drive_tools.py:296). Keep the Content-Type override synced by updating mime_type before constructing the uploader 2025-10-19 14:18:06 -04:00
Taylor Wilsdon 52edcd4172 address review feedback 2025-10-19 14:14:20 -04:00
Taylor Wilsdon bfb8cb40a3 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into fix/file-download-upload 2025-10-19 14:10:28 -04:00
Taylor Wilsdon 3e48fdb683 bump pyproject.toml 2025-10-19 14:09:55 -04:00
Shawn Zhu d613dc204c supports redirects for downloading file 2025-10-19 12:02:16 -04:00
Shawn Zhu 2b50b4caa0 do not use tmp file during stateless mode 2025-10-19 11:59:56 -04:00
Taylor Wilsdon 582195b6be Merge pull request #240 from taylorwilsdon/timezones_n_stuff
timezone awareness handling improvements and tasks fix
2025-10-18 14:22:26 -04:00
Taylor Wilsdon b0f04eff69 more feedback 2025-10-18 13:44:31 -04:00
Taylor Wilsdon f70da12dfd review comments 2025-10-18 13:19:24 -04:00
Taylor Wilsdon 33b41a59d8 timezone awareness handling improvements and tasks fix 2025-10-18 13:01:43 -04:00
Taylor Wilsdon a995fa4fde fastmcp specific deployment 2025-10-17 18:20:38 -04:00
Shawn Zhu b91ed69914 address review comment 2025-10-17 12:59:10 -04:00
Shawn 811e17e167 Update gdrive/drive_tools.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-17 12:58:31 -04:00
Shawn f4a3d3cafe Update gdrive/drive_tools.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-17 12:57:04 -04:00
Taylor Wilsdon f611c00091 Merge pull request #232 from accorvin/calendar-event-attachments
Add attachment details support to calendar events
2025-10-17 12:18:32 -04:00
Shawn Zhu 67331a766d fix: improves file download 2025-10-16 21:13:42 -04:00
olivermdb 4cd28ad9d7 Fix ruff linting errors - remove unnecessary f-string prefixes
Removed f-string prefixes from strings without placeholders
in get_gmail_attachment_content function (lines 672, 675, 677, 678, 679).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-16 01:00:10 -04:00
Taylor Wilsdon b373e12e5b Update gcalendar/calendar_tools.py 2025-10-15 16:17:56 -04:00
olivermdb 06cbdd91cd Add Gmail attachment support with ephemeral ID handling
This commit adds comprehensive Gmail attachment functionality:

1. New helper function `_extract_attachments()`:
   - Recursively extracts attachment metadata from message payloads
   - Returns filename, mimeType, size, and attachmentId for each attachment

2. Enhanced `get_gmail_message_content()`:
   - Now displays attachment information when present
   - Shows attachment ID needed for downloading

3. New tool `get_gmail_attachment_content()`:
   - Downloads email attachments via Gmail API
   - Returns base64-encoded attachment data
   - Handles ephemeral attachment ID issue correctly

Key technical insight: Gmail attachment IDs are ephemeral and change
between API calls for the same message. To avoid ID mismatches, the
download function uses the attachment ID provided by the caller directly
without refetching the message, as refetching would generate new IDs
that don't match the original ID.

The attachment download endpoint returns size information directly, while
filename and mime type should be obtained from the initial message fetch
that provided the attachment ID.
2025-10-15 16:12:52 -04:00
Taylor Wilsdon 7a70bfefd4 Merge pull request #234 from luutuankiet/feat/gmail_create_draft_html_type
chore: Gmail tool enable html message for `draft_gmail_message`
2025-10-13 15:47:01 -04:00
luutuankiet 7ef0c2503a chore: port same html arguments to draft_gmail_message 2025-10-13 12:15:18 +07:00
Taylor Wilsdon 31e6987010 update dxt 2025-10-12 09:59:25 -04:00
Alex Corvin 4fbddb6c42 Add attachment details support to calendar events
Enhance the get_events function to include detailed attachment information
when include_attachments=True, including:
- File ID (fileId)
- File URL (fileUrl)
- MIME type (mimeType)
- File title

Changes:
- Add _format_attachment_details() helper function following existing code patterns
- Add include_attachments parameter to get_events() (defaults to False)
- Update get_events() to display attachment details in both single and multiple event detailed views
- Maintain backward compatibility - attachments only shown when include_attachments=True and detailed=True
- Update function docstring with comprehensive documentation for LLM usage

Resolves #231

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-09 09:42:50 -04:00
Taylor Wilsdon 577bfafb7c chore: release v1.5.2 2025-10-07 18:01:21 -04:00
Taylor Wilsdon 24101902f1 version 2025-10-07 18:01:17 -04:00
Taylor Wilsdon 0adab0cdd7 cleanup 2025-10-07 18:01:06 -04:00
Taylor Wilsdon ad198ef2a9 dxt 2025-10-07 17:56:03 -04:00
Taylor Wilsdon a624d3661c chore: release v1.5.1 2025-10-07 17:54:59 -04:00
Taylor Wilsdon bc711bc606 version 2025-10-07 17:54:56 -04:00
Taylor Wilsdon d3a06aac38 gtasks fix 2025-10-07 17:54:35 -04:00
Taylor Wilsdon 1c7354cb5e update dxt 2025-10-07 14:33:08 -04:00
Taylor Wilsdon 91ec3c6947 chore: release v1.5.0 2025-10-07 14:31:38 -04:00
Taylor Wilsdon 7269a1042a Merge pull request #229 from accorvin/google-calendar-responses
Add attendee response status and details to calendar events
2025-10-07 13:55:44 -04:00
Alex Corvin 158780ab10 Add attendee response status and details to calendar events
Enhance the get_events function to include detailed attendee information
when detailed=True, including:
- Response status (accepted/declined/tentative/needsAction)
- Organizer flag
- Optional attendee flag

Changes:
- Add _format_attendee_details() helper function following existing code patterns
- Update get_events() to display attendee details in both single and multiple event views
- Maintain backward compatibility - new field only shown in detailed mode
- Update function docstring to document new attendee details

Resolves #228

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-07 13:15:45 -04:00
Taylor Wilsdon 26981cac24 Merge pull request #227 from benjaminjackson/main
feat(gcalendar): Add event transparency option
2025-10-07 12:50:01 -04:00
Taylor Wilsdon 8fcedefa6e refactor into helper function 2025-10-07 12:30:49 -04:00
Taylor Wilsdon c64cfd6866 Merge pull request #225 from taylorwilsdon/auth_simplification
feat: FastMCP Native OAuth 2.1 Provider Support
2025-10-07 11:48:43 -04:00
Taylor Wilsdon 43fed1741e fix ruff return groups 2025-10-07 10:30:05 -04:00
Taylor Wilsdon 03297f0670 prune dependency groups 2025-10-07 09:57:50 -04:00
Taylor Wilsdon 8f4bcad3a6 prune dependency groups 2025-10-07 09:57:31 -04:00
Taylor Wilsdon b8703d229a refactor pyproject.toml to best practices, chunk out runtime dependencies from dev dependencies 2025-10-07 09:50:23 -04:00
Benjamin Jackson 148127e364 feat(gcalendar): Add event transparency option
- Add 'transparency' parameter to create_event and modify_event functions
- Supports 'opaque' (Busy) and 'transparent' (Available/Free) modes
- Validates input and logs transparency setting or warning
- Defaults to None, preserving existing Google Calendar behavior

Provides more granular control over event scheduling and visibility.
2025-10-06 19:15:53 -04:00
Taylor Wilsdon 923df7eca5 refactor oauth2.1 support to fastmcp native 2025-10-05 18:00:10 -04:00
Taylor Wilsdon 6e194c83d9 update fastmcp 2025-10-05 17:21:18 -04:00
Taylor Wilsdon 4551e64613 Merge pull request #224 from taylorwilsdon/issues/222
feat: add support for html message send
2025-10-05 16:53:56 -04:00
Taylor Wilsdon dc261fa82f add support for html message send 2025-10-05 16:50:58 -04:00
Taylor Wilsdon 1e9feaa48f fix issuer 2025-09-30 15:35:10 -04:00
Taylor Wilsdon 482f4e33f9 chore: release v1.4.8 2025-09-29 17:08:33 -04:00
Taylor Wilsdon 086c0adef3 add new dxt 2025-09-29 17:08:24 -04:00
Taylor Wilsdon a7c0a78963 Merge pull request #219 from taylorwilsdon/oauth_feedback
enh: Legacy OAuth session binding & compatibility with modern methods
2025-09-29 17:03:29 -04:00
Taylor Wilsdon 6087b74578 dynamically set oauth base 2025-09-29 17:02:32 -04:00
Taylor Wilsdon 8b035d7033 add userinfo and fix issuer 2025-09-29 16:01:28 -04:00
Taylor Wilsdon bbab827652 timezone aware handling 2025-09-28 16:13:55 -04:00
Taylor Wilsdon 238a314fef session binding and legacy compatibility 2025-09-28 16:08:41 -04:00
Taylor Wilsdon e58ca9ec73 Merge pull request #218 from taylorwilsdon/fix/197
fix: typing to resolve #197
2025-09-28 15:39:03 -04:00
Taylor Wilsdon ff7ced33e5 yank optional 2025-09-28 15:38:39 -04:00
Taylor Wilsdon db6861c33b typing to resolve #197 2025-09-28 15:34:19 -04:00
Taylor Wilsdon c20e0388ff Merge pull request #216 from ForrestTrepte/differentiate-subtasks
feat: show subtask hierarchy
2025-09-20 17:13:11 -04:00
Taylor Wilsdon 1c235c33a4 Update gtasks/tasks_tools.py 2025-09-20 17:09:32 -04:00
Forrest Trepte c5bede71c7 resolves #204 by differentiating subtasks for top-level tasks
Also:
* Creates placeholder parents for orphaned subtasks, grouping them together even though their parent isn't available.
* Performs sorting of tasks in a simpler  way.
* Fixes mypy type warnings in tasks_tools.py so that mypy runs clean on this one file. See #194 for more info about type checking.
2025-09-20 13:15:10 -07:00
Taylor Wilsdon a8eeebb385 Merge pull request #213 from taylorwilsdon/taylorwilsdon-patch-12
Update README.md
2025-09-18 16:33:07 -04:00
Taylor Wilsdon d82c3baa25 Update README.md
Closes #207
2025-09-18 16:32:54 -04:00
Taylor Wilsdon abd6c58b7b Merge pull request #195 from ForrestTrepte/fix-completed-tasks-hidden
explain that when show_completed is set, show_hidden should also be set
2025-09-18 16:27:15 -04:00
Taylor Wilsdon 550cc65937 Merge pull request #212 from ForrestTrepte/fix-205-tasks-parameters
fix: types for tasks parameters that work with both MCP inspector and Claude Desktop
2025-09-18 16:25:48 -04:00
Taylor Wilsdon bf061293cf Merge pull request #206 from emanuilo/update-readme
chore: update readme with export_doc_to_pdf tool
2025-09-18 16:24:53 -04:00
Forrest Trepte a8ee7defa2 fix list_tasks with max_results, boolean params 2025-09-17 15:41:41 -07:00
Forrest Trepte b2fae7e91e fix list_task_lists with max_results 2025-09-17 15:41:23 -07:00
Taylor Wilsdon b64b950548 Update README.md 2025-09-14 08:43:15 -04:00
Taylor Wilsdon 960bd59405 add security.md 2025-09-11 11:37:00 -04:00
Taylor Wilsdon a0b13c113c chore: release v1.4.7 2025-09-09 11:27:57 -04:00
Taylor Wilsdon cff5882edb yank more emojis 2025-09-09 11:27:52 -04:00
Taylor Wilsdon 239a4bf3ac yank more emojis 2025-09-09 11:13:30 -04:00
Taylor Wilsdon 1bf058ce9b chore: release v1.4.6 2025-09-09 11:10:08 -04:00
Taylor Wilsdon a75136e80d remove stupid emoji from startup logging 2025-09-09 11:09:58 -04:00
Emanuilo Jovanovic 353b9133bf chore: update readme with export_doc_to_pdf tool 2025-09-08 11:34:16 +02:00
Forrest Trepte 7f8b327633 explain that when show_completed is set, show_hidden should also be set
fixes #139

add comment from https://developers.google.com/workspace/tasks/reference/rest/v1/tasks/list about the parameter show_completed

When Google's web UI and Google's mobile apps complete a task, they also make it hidden. When using MCP, if you ask for your hidden tasks, the LLM won't find them if it doesn't know this.
2025-08-29 13:50:37 -07:00
Taylor Wilsdon 5b8e8477c0 ruff 2025-08-24 14:09:23 -04:00
Taylor Wilsdon 2521694eaa fix dxt 2025-08-24 14:04:50 -04:00
Taylor Wilsdon e43766d633 fix claude problems 2025-08-24 14:03:36 -04:00
Taylor Wilsdon 1c28e93e93 chore: release v1.4.5 2025-08-24 14:00:35 -04:00
Taylor Wilsdon 5626bae905 update scope retrieval for legacy oauth2callback 2025-08-24 14:00:21 -04:00
Taylor Wilsdon 9d035fa24f update dxt 2025-08-24 11:37:22 -04:00
Taylor Wilsdon 7dc50ce51d chore: release v1.4.4 2025-08-24 11:36:31 -04:00
Taylor Wilsdon 797b710c12 smithery? 2025-08-24 11:26:45 -04:00
Taylor Wilsdon c1d63c6c3d smithery? 2025-08-24 11:19:35 -04:00
Taylor Wilsdon cfec397fa2 Merge pull request #192 from taylorwilsdon/issues/191
enh: scope the scopes
2025-08-24 11:15:29 -04:00
Taylor Wilsdon ec9a20d8a3 scope the scopes 2025-08-24 11:15:11 -04:00
Taylor Wilsdon 24abf2a0f0 scope the scopes 2025-08-24 10:37:04 -04:00
Taylor Wilsdon bfe984d3fa smithery 2025-08-23 13:44:03 -04:00
Taylor Wilsdon 318d683849 routes 2025-08-23 13:29:54 -04:00
Taylor Wilsdon 700603317d Merge branch 'WORKSPACE_MCP_STATELESS_MODE' 2025-08-23 13:05:44 -04:00
Taylor Wilsdon aeb0302d71 Merge pull request #189 from taylorwilsdon/WORKSPACE_MCP_STATELESS_MODE
feat: Stateless Mode for Container Deployments & user_google_email removal
2025-08-23 13:05:19 -04:00
Taylor Wilsdon b2ffa8f182 stateless 2025-08-23 13:04:37 -04:00
Taylor Wilsdon 38f445f35b reorder 2025-08-23 12:26:52 -04:00
Taylor Wilsdon 3c6a66b616 whitespace 2025-08-23 12:25:31 -04:00
Taylor Wilsdon d734e30c05 fix fastmcp_server 2025-08-23 12:24:44 -04:00
Taylor Wilsdon 248c9395da refac 2025-08-23 12:22:27 -04:00
Taylor Wilsdon 26ef6cc12e refac 2025-08-23 12:20:27 -04:00
Taylor Wilsdon 788e39368d refac decorator, add configure_logt_formatting helper, fixed variable scope & pep8 2025-08-23 12:04:04 -04:00
Taylor Wilsdon 57748df9c2 dynamically modify function params when in oauth2.1 mode 2025-08-23 11:39:37 -04:00
Taylor Wilsdon 3280a76a65 stateless mode for fastmcp entrypoint 2025-08-23 11:19:46 -04:00
Taylor Wilsdon 8f9a46e55b implement WORKSPACE_MCP_STATELESS_MODE 2025-08-23 11:12:21 -04:00
Taylor Wilsdon 0ab155e10e Merge pull request #185 from emanuilo/feat/docs-pdf-export
Add PDF export functionality for Google Docs
2025-08-23 10:19:19 -04:00
Taylor Wilsdon 42a3e9d6a2 ruff 2025-08-23 10:18:50 -04:00
Taylor Wilsdon d0f277435a Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feat/docs-pdf-export 2025-08-23 10:16:40 -04:00
Taylor Wilsdon d05409a93a avoid recreating file object 2025-08-23 10:16:32 -04:00
Taylor Wilsdon 5d90f8802c tool tier 2025-08-23 10:11:13 -04:00
Taylor Wilsdon 5b6bc1d0f7 Update core/tool_tiers.yaml 2025-08-23 10:10:04 -04:00
Taylor Wilsdon fc65c0c5be Add fastmcp entrypoint 2025-08-22 13:52:56 -04:00
Taylor Wilsdon 090019a645 chore: release v1.4.3 2025-08-22 11:36:46 -04:00
Taylor Wilsdon 0158548de1 dxt update 2025-08-22 11:36:06 -04:00
Taylor Wilsdon 4be6d79c3d Merge pull request #187 from abelsr/main
Refactor base URL handling and add Docker Compose for local development
2025-08-22 11:27:14 -04:00
Taylor Wilsdon a591783a9b ruff 2025-08-22 11:03:34 -04:00
Taylor Wilsdon 705cf29df3 update base uri per fastmcp #1387 2025-08-22 10:13:13 -04:00
Taylor Wilsdon c136e6276f ruff 2025-08-22 09:52:12 -04:00
Taylor Wilsdon f1b06446bc WORKSPACE_EXTERNAL_URL - add an document usage 2025-08-22 09:51:49 -04:00
Taylor Wilsdon 4c424d95d5 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into abelsr/main 2025-08-22 09:34:17 -04:00
Taylor Wilsdon 1336f9eb19 Merge pull request #184 from taylorwilsdon/safe_log_and_int
enh: Safe logging & Log Formatting
2025-08-22 09:32:49 -04:00
Taylor Wilsdon 01f48b6c5e Update auth/google_remote_auth_provider.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-22 09:31:05 -04:00
Abel Santillan Rodriguez fb8ea1cf40 fix: update permissions for store_creds volume in Dockerfile 2025-08-22 00:02:02 -06:00
Abel Santillan Rodriguez 1b19930e15 fix: reorder USER command in Dockerfile for proper permissions 2025-08-22 00:00:42 -06:00
Abel Santillan Rodriguez 723e2df335 fix: add permission changes for store_creds volume in Dockerfile 2025-08-21 23:59:39 -06:00
Abel Santillan Rodriguez a1e4e2632b fix: correct GOOGLE_MCP_CREDENTIALS_DIR path in docker-compose for gws_mcp service 2025-08-21 23:57:58 -06:00
Abel Santillan Rodriguez 242ff2ea08 fix: update volume mapping for gws_mcp service in docker-compose 2025-08-21 23:55:38 -06:00
Abel Santillan Rodriguez 9c228001c1 fix: update docker-compose to include environment variables and volumes for gws_mcp service 2025-08-21 23:48:08 -06:00
Abel Santillan Rodriguez 8d27afc7e8 feat: add initial docker-compose configuration for gws_mcp service 2025-08-21 17:53:19 -06:00
Abel Santillan Rodriguez 399999144c fix: ensure trailing slash in resource URL for OAuth protected resource 2025-08-21 13:33:36 -06:00
Abel Santillan Rodriguez 4e1e02d1de fix: add base_url to authorization_servers and resource_server_url in GoogleRemoteAuthProvider 2025-08-21 13:09:23 -06:00
Abel Santillan Rodriguez ff364596c3 fix: remove port from authorization and resource server URLs in GoogleRemoteAuthProvider 2025-08-21 13:04:50 -06:00
Abel Santillan Rodriguez effae6649f fix: update base_url to exclude port from OAuth configuration 2025-08-21 12:54:39 -06:00
Emanuilo Jovanovic c552b559ae feat: add a tool to tool_tiers 2025-08-21 12:38:35 +02:00
Emanuilo Jovanovic 4c5ad0ae78 feat: add docs pdf export 2025-08-21 12:31:55 +02:00
Taylor Wilsdon fd6afaaa82 log formatting 2025-08-20 18:35:36 -04:00
Taylor Wilsdon e16654b719 fix typing 2025-08-20 16:46:21 -04:00
Taylor Wilsdon 6cd852e440 fix typing 2025-08-20 16:46:11 -04:00
Taylor Wilsdon 8062cd6803 str -> int for tasks maxresults 2025-08-20 15:25:13 -04:00
Taylor Wilsdon d89e0e90c8 str -> int for tasks maxresults 2025-08-20 15:24:54 -04:00
Taylor Wilsdon c32931d72f str -> int for tasks maxresults 2025-08-20 15:24:15 -04:00
Taylor Wilsdon c9c2adffa6 bump fastmcp 2025-08-20 09:48:25 -04:00
Taylor Wilsdon 7a19fc76af safe logging 2025-08-20 09:47:06 -04:00
Taylor Wilsdon 0cb4e569ea refac docker startup & helm 2025-08-19 16:35:06 -04:00
Taylor Wilsdon 8702415c96 docker tools flag 2025-08-19 16:31:08 -04:00
Taylor Wilsdon c582174377 bump manifest 2025-08-19 14:59:58 -04:00
Taylor Wilsdon 662a41c40c chore: release v1.4.2 2025-08-19 14:59:27 -04:00
Taylor Wilsdon 2ec5c52aa4 bump manifest 2025-08-19 14:59:23 -04:00
Taylor Wilsdon d83a7b356c chore: release v1.4.1 2025-08-19 14:59:16 -04:00
Taylor Wilsdon 748293bbf2 add tool tiers to build 2025-08-19 14:59:04 -04:00
Taylor Wilsdon e78d29dbb6 bump manifest 2025-08-19 14:27:08 -04:00
Taylor Wilsdon bf2b18f26b Merge pull request #173 from cfdude/integration-fresh
feat: enhance Google Docs and Drive functionality with image insertion and permission checking
2025-08-19 14:25:53 -04:00
Taylor Wilsdon 7fe312192f versioning 2025-08-19 14:16:30 -04:00
Taylor Wilsdon c94a9cf6a8 restore 2025-08-19 14:15:53 -04:00
Taylor Wilsdon 737b493878 refactor other helpers into helpers lib, consolidate 2025-08-19 14:15:04 -04:00
Taylor Wilsdon 25dddda9b8 restore inadvertently removed tool 2025-08-19 13:59:41 -04:00
Taylor Wilsdon eb1f0e007d Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into integration-fresh 2025-08-19 13:57:01 -04:00
Rob Sherman d3049b87f8 fix: remove unused import create_insert_image_request
- Fixes ruff F401 linting error for unused import
- Cleanup after removing image insertion functions
2025-08-19 10:45:57 -07:00
Rob Sherman 80d668443e feat: implement Taylor's requested changes for PR #173
- Remove all image insertion functions from gdocs/docs_tools.py as requested
- Add tool tiers for Drive permission functions in 'complete' tier
- Keep Drive permission functionality (get_drive_file_permissions, check_drive_file_public_access)
- Remove insert_doc_image from docs complete tier in tool_tiers.yaml

Addresses Taylor's feedback: 'drop the image insert stuff as that's already available'
and 'Need to add tool tiers for these, let me know which you want I'm assuming complete'
2025-08-19 10:44:29 -07:00
Taylor Wilsdon b7b53d6684 Update README.md 2025-08-19 12:23:51 -04:00
Taylor Wilsdon 08c6f35421 chore: release v1.4.0 2025-08-18 13:21:55 -04:00
Taylor Wilsdon 1e01535a76 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp 2025-08-18 13:21:31 -04:00
Taylor Wilsdon a56ebd80c4 manifest.json bump 2025-08-18 13:21:27 -04:00
Taylor Wilsdon 00d9da64aa update dxt 2025-08-18 13:21:08 -04:00
Taylor Wilsdon bdd8fcb61f Merge pull request #161 from shawnzhu/credential-provider
feat: abstract credential store
2025-08-18 13:11:57 -04:00
Taylor Wilsdon 34c4a5f8e7 code now properly checks the boolean return value from store_credential instead of overwriting the
credentials object.
2025-08-18 13:09:05 -04:00
Taylor Wilsdon 03cb54a2e1 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into credential-provider 2025-08-18 13:04:36 -04:00
Taylor Wilsdon 8d2167222f Update README.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-18 13:04:02 -04:00
Taylor Wilsdon 97b59a2b4d Merge pull request #175 from ForrestTrepte/sort_tasks
feat: sort tasks in the same order as the google task list
2025-08-18 13:03:37 -04:00
Taylor Wilsdon 0484b3a842 fstring begone 2025-08-18 12:59:02 -04:00
Taylor Wilsdon b931636169 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into sort_tasks 2025-08-18 12:47:28 -04:00
Taylor Wilsdon db12f9e104 docstring formatter 2025-08-18 12:47:09 -04:00
Shawn Zhu 13d0d66f4e doc: how to use credential store 2025-08-17 17:41:23 -04:00
Forrest Trepte 0ae2c16f97 add note to sort_tasks_by_position docstring 2025-08-17 11:06:40 -07:00
Forrest Trepte 51f7376d0f LIST_TASKS_MAX_POSITION constant 2025-08-17 11:03:50 -07:00
Taylor Wilsdon 2699eecf90 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into integration-fresh 2025-08-17 14:01:00 -04:00
Forrest Trepte 6db94a0e0b LIST_TASKS_MAX_RESULTS_DEFAULT/MAX constants 2025-08-17 10:34:28 -07:00
Taylor Wilsdon 29f677f47b Merge pull request #176 from taylorwilsdon/tool_tiers
enh: Tool tiers - granular tools registration control
2025-08-17 11:50:33 -04:00
Taylor Wilsdon c66ef56fbe updates 2025-08-17 11:43:46 -04:00
Taylor Wilsdon 33907b4776 more fmt 2025-08-17 11:40:56 -04:00
Taylor Wilsdon ce0838f230 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into tool_tiers 2025-08-17 11:39:58 -04:00
Taylor Wilsdon 45ea1eb0b5 more fmt 2025-08-17 11:39:54 -04:00
Taylor Wilsdon f58036cafc better tool tiers 2025-08-17 11:27:23 -04:00
Taylor Wilsdon f4f73478ba more readme 2025-08-17 11:06:53 -04:00
Taylor Wilsdon 9a60dbeb7d more readme 2025-08-17 11:06:40 -04:00
Taylor Wilsdon ce0314d361 more readme 2025-08-17 11:05:00 -04:00
Taylor Wilsdon d5b9ba17dd rearrange table 2025-08-17 11:03:43 -04:00
Taylor Wilsdon 206b0314aa rearrange table 2025-08-17 11:01:58 -04:00
Taylor Wilsdon 811585da2e rearrange table 2025-08-17 10:41:08 -04:00
Taylor Wilsdon 1821c061aa rearrange table 2025-08-17 10:40:11 -04:00
Taylor Wilsdon 942538938b rearrange table 2025-08-17 10:39:47 -04:00
Taylor Wilsdon cedef24158 rearrange table 2025-08-17 10:38:43 -04:00
Taylor Wilsdon 629958892f rearrange table 2025-08-17 10:37:44 -04:00
Taylor Wilsdon 9113500566 rearrange table 2025-08-17 10:36:49 -04:00
Taylor Wilsdon 8149c6b106 more readme 2025-08-17 10:02:02 -04:00
Taylor Wilsdon 3f5a248dcd more readme 2025-08-17 09:49:41 -04:00
Taylor Wilsdon 62365bbaf5 Update README.md 2025-08-16 20:42:58 -04:00
Taylor Wilsdon 98a8f0673c readme love 2025-08-16 18:50:58 -04:00
Taylor Wilsdon 308d089126 emojis for adults 2025-08-16 18:48:13 -04:00
Taylor Wilsdon e853de10f5 fix ruff check 2025-08-16 18:10:39 -04:00
Taylor Wilsdon 531fb3b3f9 emojis for adults 2025-08-16 18:03:06 -04:00
Taylor Wilsdon 8afe112e22 tool registry middleware 2025-08-16 17:14:27 -04:00
Taylor Wilsdon 1e938e81dd overhaul the readme 2025-08-16 17:14:14 -04:00
Taylor Wilsdon 539a3f3781 play nice with --tools 2025-08-16 16:41:35 -04:00
Taylor Wilsdon 84373a06fc add new tool tier startup flag for flexible tool registration 2025-08-16 16:21:37 -04:00
Forrest Trepte 6ea2f6cd78 support max_results larger than the Google API page size
This allows the server to return a large task list in sorted order instead of pages of tasks as returned by the Google API in an arbitrary order.
2025-08-16 12:47:22 -07:00
Forrest Trepte ccf549df6d warn about orphaned subtasks 2025-08-16 11:40:26 -07:00
Taylor Wilsdon 8c17bc15b0 add tool tiers - first pass 2025-08-16 14:26:36 -04:00
Forrest Trepte ee27a9258f sort tasks by position 2025-08-16 11:15:33 -07:00
Taylor Wilsdon a8de9916f5 add tool tiers - first pass 2025-08-16 13:29:52 -04:00
Taylor Wilsdon 10f81558c7 consolidated calendar event and events tools 2025-08-16 13:28:48 -04:00
Rob Sherman 40405228f8 fix: resolve ruff linting errors
- Remove unused imports (Optional, Dict, Any) from typing
- Fix f-string without placeholder (line 54)
- All ruff checks now pass
2025-08-14 18:47:35 -07:00
Rob Sherman 203005b76d feat: enhance Google Docs and Drive functionality
- Add insert_doc_image_from_drive() with permission checking
- Add insert_doc_image_url() for URL-based image insertion
- Add gdrive/drive_file_permissions.py with permission utilities
- Add gdrive/drive_helpers.py with Drive utility functions
- Add create_insert_text_segment_request() helper for headers/footers
- Improve error handling to distinguish auth vs validation errors
- Maintain backward compatibility with existing functionality
- Include comprehensive error messages and user guidance

Tested successfully with real Google Workspace integration.
2025-08-14 18:38:37 -07:00
Taylor Wilsdon 99018d32d4 Merge pull request #164 from shawnzhu/schema-modifier
remove user_google_email parameter for multi-user mode
2025-08-14 11:12:16 -04:00
Taylor Wilsdon efcd525870 ruff check 2025-08-14 11:10:23 -04:00
Taylor Wilsdon 90533bb5f9 Update main.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-14 11:06:15 -04:00
Taylor Wilsdon 845d3f0db3 update readme for oauth21 2025-08-14 10:23:09 -04:00
Taylor Wilsdon 985228046e improve logic a bit, cleanup 2025-08-14 10:22:20 -04:00
Shawn Zhu 3a52f16f14 removes user_google_email argument from tool schema under multi-user mode 2025-08-13 22:36:19 -04:00
Shawn Zhu f59eb0a0b2 Merge branch 'main' into schema-modifier 2025-08-13 21:20:02 -04:00
Taylor Wilsdon baff861274 improve smithery 2025-08-13 18:06:21 -04:00
Taylor Wilsdon cdff04c6bc try smithery a different way 2025-08-13 17:49:34 -04:00
Taylor Wilsdon 4fe2cd90c3 try smithery a different way 2025-08-13 17:45:37 -04:00
Taylor Wilsdon b4df2b76d7 simplify docker startup 2025-08-13 17:10:47 -04:00
Taylor Wilsdon 5d9860533c smithery docs are useless 2025-08-13 16:57:08 -04:00
Taylor Wilsdon 1b06bef0a7 Merge pull request #171 from taylorwilsdon/enh_oauth_and_startup
enh: Modularize OAuth Further, Add Startup Port Availability Check
2025-08-13 16:34:09 -04:00
Taylor Wilsdon 23ff1d913e attempt to unfuck smithery one last time before I delete this outright 2025-08-13 16:33:59 -04:00
Taylor Wilsdon 9bdbd64b27 ruff check 2025-08-13 16:22:49 -04:00
Taylor Wilsdon f17c4fec15 refac service decorator to simplify and remove unused cache nonsense 2025-08-13 16:21:58 -04:00
Taylor Wilsdon c3bb9ee5b0 consolidate _update_email_in_args 2025-08-13 15:56:46 -04:00
Taylor Wilsdon e89161240c check if port is available in startup flow 2025-08-13 15:46:03 -04:00
Taylor Wilsdon f3e9c55a0c Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feat/gmail-html-bodies 2025-08-13 15:39:35 -04:00
Taylor Wilsdon b3236d6c5e format 2025-08-13 15:39:32 -04:00
Taylor Wilsdon 09a4f2d311 Merge pull request #168 from Menelaus48/feat/gmail-html-bodies
feat(gmail): add HTML body extraction with text fallback
2025-08-13 13:13:59 -04:00
Taylor Wilsdon 9c1b859d12 trim trailing whitespace 2025-08-13 12:05:06 -04:00
Taylor Wilsdon 2a7fdd3a21 Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into feat/gmail-html-bodies 2025-08-13 12:04:08 -04:00
Taylor Wilsdon c2d1c71bed refac 2025-08-13 12:04:07 -04:00
Taylor Wilsdon fd0118f912 Update README.md 2025-08-13 10:38:55 -04:00
Taylor Wilsdon c767aa2357 constant for body limit 2025-08-13 10:20:35 -04:00
Taylor Wilsdon 6d8e4c2ca6 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feat/gmail-html-bodies 2025-08-13 10:12:21 -04:00
Taylor Wilsdon 7287e958ab Merge pull request #169 from Menelaus48/feat/gmail-label-array-schema
fix(gmail): accept List[str] for label arrays; emit clean array schema (single + batch)
2025-08-13 10:07:04 -04:00
Taylor Wilsdon d57e9a2927 pull in main 2025-08-13 09:53:05 -04:00
Taylor Wilsdon 461fc877b9 pull in main 2025-08-13 09:48:51 -04:00
Taylor Wilsdon 0954465174 body -> field 2025-08-13 09:48:34 -04:00
Taylor Wilsdon dd5d5c774e body -> field 2025-08-13 09:44:53 -04:00
Taylor Wilsdon 3e79c5415b chore: release v1.3.4 2025-08-13 09:24:23 -04:00
Taylor Wilsdon 7bdac6081b dxt update 2025-08-13 09:24:05 -04:00
Taylor Wilsdon 6a6b7b806a bump manifest 2025-08-13 09:23:56 -04:00
Taylor Wilsdon 3538f0b395 bump manifest 2025-08-13 09:23:46 -04:00
Taylor Wilsdon ffeabd6423 repack dxt 2025-08-13 09:23:27 -04:00
Taylor Wilsdon 968695cfcd Merge pull request #166 from taylorwilsdon/oauth_cleanup_consolidate
enh: Cleanup & Consolidate OAuth Logic
2025-08-13 09:11:13 -04:00
Taylor Wilsdon 2159f5f19d Update README.md 2025-08-13 08:59:39 -04:00
Taylor Wilsdon 3f6820dbc7 Update README.md 2025-08-13 08:58:25 -04:00
Peter Alfieri 3f1a1d5edc fix(gmail): accept List[str] for label arrays with empty defaults; fix tool schema (single + batch) 2025-08-13 01:11:35 -04:00
Peter Alfieri 4857b760b5 feat(gmail): add HTML body extraction with text fallback (single + batch)
Add _extract_message_bodies() to return text and HTML (BFS over multipart)
Prefer text/plain; gracefully fall back to HTML-only bodies
Update single and batch tools; truncate very large HTML; guard base64 decode
Backward compatible; no new deps

Testing: verified with live eBay emails (single and batch show "[HTML Content Converted]")
2025-08-13 00:14:26 -04:00
Taylor Wilsdon 0cb802ee6f cleanup & log correct username in output 2025-08-12 18:19:24 -04:00
Taylor Wilsdon 31d902203e Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into oauth_cleanup_consolidate 2025-08-12 10:42:01 -04:00
Taylor Wilsdon 70146c27da Update README.md 2025-08-12 10:35:43 -04:00
Taylor Wilsdon f773c81c88 Update README.md 2025-08-12 10:19:44 -04:00
Taylor Wilsdon 16dc019138 add ruff workflow 2025-08-12 09:46:33 -04:00
Taylor Wilsdon 8ff093dc20 ruff check fixes 2025-08-12 09:37:20 -04:00
Taylor Wilsdon 004a462496 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into oauth_cleanup_consolidate 2025-08-12 08:45:34 -04:00
Taylor Wilsdon dc404fdaef oauth cleanup 2025-08-12 08:45:24 -04:00
Shawn Zhu 68a3307dd9 addresses review comments 2025-08-11 20:44:14 -04:00
Shawn Zhu 2f0c607d5d remove user_google_email parameter for multi-user mode 2025-08-11 19:16:41 -04:00
Taylor Wilsdon 30953b9abd Update README.md 2025-08-11 18:09:54 -04:00
Taylor Wilsdon 604964cba8 Update README.md 2025-08-11 18:08:00 -04:00
Taylor Wilsdon fff945a063 release 2025-08-11 16:56:11 -04:00
Taylor Wilsdon 5fa1387b18 chore: release v1.3.3 2025-08-11 16:15:15 -04:00
Taylor Wilsdon 989dda8c20 fix registration 2025-08-11 16:15:09 -04:00
Taylor Wilsdon a0a5d589bd fix registration 2025-08-11 16:12:47 -04:00
Shawn Zhu c505a4782b feat: abstract credential store 2025-08-10 18:11:27 -04:00
Taylor Wilsdon 0384347878 chore: release v1.3.2 2025-08-10 17:51:09 -04:00
Taylor Wilsdon 1a155e3c88 start_google_auth docstring 2025-08-10 17:40:27 -04:00
Taylor Wilsdon c719b2573d Merge pull request #159 from taylorwilsdon/enhanced_docs
feat: Enhanced Google Doc Editing Granularity
2025-08-10 16:29:15 -04:00
Taylor Wilsdon a3db9cefa4 table data checks 2025-08-10 16:28:40 -04:00
Taylor Wilsdon 6022d2c7d9 consolidate the doc modification functions 2025-08-10 16:22:27 -04:00
Taylor Wilsdon 0c1edf996e fixes 2025-08-10 16:10:47 -04:00
Taylor Wilsdon 5bcd149f40 lots of fixes 2025-08-10 15:56:18 -04:00
Taylor Wilsdon 543f85ac1c helpers for formatting 2025-08-10 15:33:11 -04:00
Taylor Wilsdon e29ff043fd refactor into modules 2025-08-10 15:21:10 -04:00
Taylor Wilsdon 8ca2c4e83b add helpers 2025-08-10 14:54:18 -04:00
Taylor Wilsdon d67e1fcf0f clean up docstrings 2025-08-10 14:35:56 -04:00
Taylor Wilsdon 28d0ef1ba7 Merge commit '6fe2fcdfa21e1a89f7b534bf7cc1846a6aeb2ec9' into enhanced_docs 2025-08-10 14:29:21 -04:00
Taylor Wilsdon 6fe2fcdfa2 creating tables actually working reliably 2025-08-10 14:21:01 -04:00
Taylor Wilsdon 0279ffff92 gitignore cleanup 2025-08-10 10:37:57 -04:00
Taylor Wilsdon fcf407201d Update gdocs/docs_tools.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-10 10:36:41 -04:00
Taylor Wilsdon 68f2b41065 Merge pull request #156 from yairwein/fix-modify-sheet-values-type-mismatch
fix: handle JSON string input for modify_sheet_values parameter
2025-08-10 10:34:24 -04:00
Taylor Wilsdon c92a4ae0e4 add python-dotenv 2025-08-10 10:24:15 -04:00
Yair Weinberger ec01bf7e79 fix: handle JSON string input for modify_sheet_values parameter
Fixes type mismatch error preventing MCP clients from calling modify_sheet_values.

## Problem
FastMCP 2.11.1 passes complex nested types (like List[List[str]]) as JSON strings
through the MCP protocol, but the schema validation expected the actual Python type.
This caused validation failures with error: '[["Task"]]' is not valid under any of
the given schemas.

## Solution
- Accept both str and List[List[str]] types for the values parameter
- Parse JSON string input to Python list when received from MCP clients
- Validate structure is a proper 2D array (list of lists)
- Maintain backward compatibility with direct Python list input

## Changes
- Added json import and Union type hint
- Modified values parameter to accept Union[str, List[List[str]]]
- Added JSON parsing logic with proper validation
- Updated docstring to document both input formats

This follows the proven pattern used in calendar_tools.py for handling reminders.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-10 12:00:36 +03:00
Rob Sherman f369ca1635 feat(docs): add comprehensive Google Docs editing capabilities
Add full document editing and manipulation support to Google Docs tools,
expanding beyond read-only operations to match Google Docs API capabilities.

Features added:
- Text operations: update_doc_text, find_and_replace_doc, format_doc_text
- Structural elements: insert_doc_elements, insert_doc_image
- Document management: update_doc_headers_footers, batch_update_doc
- Helper functions module for common document operations

Changes:
- gdocs/docs_tools.py: Add 7 new editing functions with comprehensive error handling
- gdocs/docs_helpers.py: New helper module with utility functions for document operations
- README.md: Update Google Docs description to include full editing capabilities
- CLAUDE.md: Add comprehensive documentation for new editing features
- .mcp.json: Add MCP server configuration file
- .gitignore: Resolve merge conflicts from upstream sync
- uv.lock: Update dependencies from upstream merge

The implementation uses Google Docs API batchUpdate operations for atomic
document modifications and maintains compatibility with existing authentication
and error handling patterns.

All new tools follow the established @require_google_service decorator pattern
and include proper scope management for write operations.
2025-08-09 17:57:34 -07:00
Taylor Wilsdon eca4845fef chore: release v1.3.1 2025-08-09 12:26:20 -04:00
Taylor Wilsdon 94a3808d91 update dxt 2025-08-09 12:25:42 -04:00
Taylor Wilsdon 9c3f850be2 Merge pull request #154 from taylorwilsdon/cleanup_oauth
enh: cleanup / refac and remove unnecessary legacy module
2025-08-09 12:23:24 -04:00
Taylor Wilsdon a80735df5e ruff check cleanup 2025-08-09 12:21:42 -04:00
Taylor Wilsdon 58f55019c4 cleanup / refac and remove unnecessary legacy module 2025-08-09 12:18:08 -04:00
Taylor Wilsdon c93e9cc0cf update dxt 2025-08-09 12:00:53 -04:00
Taylor Wilsdon c6cc859d35 update dxt 2025-08-09 12:00:38 -04:00
Taylor Wilsdon 5afd7c8bdd chore: release v1.3.0 2025-08-09 11:59:30 -04:00
Taylor Wilsdon 5b8b639f44 Merge pull request #153 from taylorwilsdon/vscode_oauth_support
feat: Streamlined VSCode OAuth Support
2025-08-09 11:58:10 -04:00
Taylor Wilsdon 773645794a source of truth for oauth2.1 enablement 2025-08-09 11:53:00 -04:00
Taylor Wilsdon 374dc9c3e7 simplify cors middleware implementation 2025-08-09 11:44:12 -04:00
Taylor Wilsdon 42dcd54b18 update readme 2025-08-09 11:16:35 -04:00
Taylor Wilsdon 438d1fcd02 remove vscode cruft 2025-08-09 11:15:43 -04:00
Taylor Wilsdon 188eea3d3b no need for port sillyness 2025-08-09 10:52:14 -04:00
Taylor Wilsdon 6e60979879 refactor to centralize, move to desktop type 2025-08-09 10:46:31 -04:00
Taylor Wilsdon ed379bbf2c works in all with /mcp 2025-08-09 10:04:33 -04:00
Taylor Wilsdon 412b892c6d works with /mcp/ in both mcp inspector and vscode 2025-08-09 10:02:37 -04:00
Taylor Wilsdon 34b18b2ca4 fixerup 2025-08-08 19:34:07 -04:00
Taylor Wilsdon 73d44693aa no more hardcoded constants 2025-08-08 19:01:56 -04:00
Taylor Wilsdon d191a0c95c Update README.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-08 17:53:25 -04:00
Taylor Wilsdon 9a24b90818 ruff check 2025-08-08 17:51:04 -04:00
Taylor Wilsdon 498a3dd395 rm 2025-08-08 17:50:48 -04:00
Taylor Wilsdon fb5f1d5f12 readme updates 2025-08-08 17:31:26 -04:00
Taylor Wilsdon 5b0832bfbd authlib 2025-08-08 17:12:41 -04:00
Taylor Wilsdon 39a97b63a1 break the loop - working again with mcp inspector 2025-08-08 16:43:33 -04:00
Taylor Wilsdon 6d0a674037 works 2025-08-08 13:43:26 -04:00
Taylor Wilsdon 10471e1707 chore: release v1.2.2 2025-08-07 16:07:56 -04:00
Taylor Wilsdon 358ea4373e update dxt 2025-08-07 16:07:04 -04:00
Taylor Wilsdon 6a6ff34128 Merge pull request #150 from taylorwilsdon/issues/148
centralize redirect uri logic and update GOOGLE_OAUTH_REDIRECT_URI docs
2025-08-07 16:06:33 -04:00
Taylor Wilsdon e5e830a1fa cleanup 2025-08-07 16:03:10 -04:00
Taylor Wilsdon f1b6d99301 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into issues/148 2025-08-07 15:59:04 -04:00
Taylor Wilsdon 81c171e884 fix core/server start_auth_flow (thanks @sabhay jain!) 2025-08-07 15:58:22 -04:00
Taylor Wilsdon 436692fb6a Merge pull request #149 from benjaminjackson/main
Add reminder support to Google Calendar MCP
2025-08-07 13:28:49 -04:00
Taylor Wilsdon 224f122e2f better default handling 2025-08-07 13:28:21 -04:00
Taylor Wilsdon 54dbcb777c handle string and json object 2025-08-07 13:15:31 -04:00
Taylor Wilsdon 753242f44d Merge branch 'main' of https://github.com/taylorwilsdon/google_workspace_mcp into benjaminjackson/main 2025-08-07 11:39:11 -04:00
Taylor Wilsdon dcdc90df4d expand coverage to all oauth routes 2025-08-07 11:37:08 -04:00
Taylor Wilsdon 7c09018144 centralize redirect uri logic and update GOOGLE_OAUTH_REDIRECT_URI docs 2025-08-07 10:40:39 -04:00
Taylor Wilsdon f42d711007 Update issue templates 2025-08-07 09:38:53 -04:00
Taylor Wilsdon 24f8d075fe Update README.md 2025-08-07 09:35:53 -04:00
Benjamin Jackson fe6f159ed7 Add reminder support to Google Calendar MCP
- Add reminder parameters to create_event and modify_event functions
- Support popup and email reminder methods with configurable timing
- JSON string parameter format for MCP compatibility
- Validate reminder format, method, and timing constraints
- Maximum 5 reminders per event, 0-40320 minutes range
2025-08-07 12:41:05 +02:00
Taylor Wilsdon b5448597b3 chore: release v1.2.1 2025-08-06 11:17:01 -04:00
Taylor Wilsdon 454bd94711 fix regex and update dxt 2025-08-06 11:15:43 -04:00
Taylor Wilsdon a962b90387 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp 2025-08-06 11:12:31 -04:00
Taylor Wilsdon 406b69d208 Merge pull request #144 from murphybread/fix/missing-user-email-config
feat: Enable USER_GOOGLE_EMAIL configuration in manifest.json for DXT users
2025-08-06 11:11:15 -04:00
Taylor Wilsdon 7ec843bd12 Update manifest.json 2025-08-06 11:08:07 -04:00
Taylor Wilsdon 43ab3eacc7 update dxt 2025-08-06 10:56:03 -04:00
Taylor Wilsdon 28cdfd87f9 Merge pull request #147 from taylorwilsdon/user_email_in_oauth21
enh: Disable USER_GOOGLE_EMAIL when running in OAuth 2.1 Multi User Mode
2025-08-06 10:54:49 -04:00
Taylor Wilsdon d583f96ed9 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into user_email_in_oauth21 2025-08-06 10:53:30 -04:00
Taylor Wilsdon 51d41da71d Merge pull request #146 from taylorwilsdon/helm_charts
enh: Add Helm Chart for k8s
2025-08-06 10:52:57 -04:00
Taylor Wilsdon ab6d6da916 Update helm-chart/workspace-mcp/README.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-06 10:52:48 -04:00
Taylor Wilsdon 8c894c9ca1 Update helm-chart/workspace-mcp/templates/NOTES.txt
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-06 10:52:04 -04:00
Taylor Wilsdon 8e8bafd2bd image tag templating and base uri config 2025-08-06 10:45:28 -04:00
murphybread 4a6d28fe90 Update manifest.json
Co-authored-by: Taylor Wilsdon <tbarrettwilsdon@gmail.com>
2025-08-06 23:23:02 +09:00
murphybread c79e6d9bc3 Update manifest.json
Co-authored-by: Taylor Wilsdon <tbarrettwilsdon@gmail.com>
2025-08-06 23:22:56 +09:00
Taylor Wilsdon aee74f0b67 USER_GOOGLE_EMAIL to None when MCP_ENABLE_OAUTH21=true 2025-08-06 10:19:26 -04:00
Taylor Wilsdon 4c49529808 add helm chart 2025-08-06 10:14:01 -04:00
Murphybread 75e2ac3abe fix: Add USER_GOOGLE_EMAIL to manifest config 2025-08-06 22:46:35 +09:00
Taylor Wilsdon 8d55affe81 fix dockerfile 2025-08-06 09:33:09 -04:00
Taylor Wilsdon ee83ab7697 dxt and uv updates 2025-08-05 19:11:34 -04:00
Taylor Wilsdon 275422b16c Update manifest.json 2025-08-05 19:08:05 -04:00
Taylor Wilsdon 9e61180251 Update README.md 2025-08-05 18:06:00 -04:00
Taylor Wilsdon 206999126a chore: release v1.2.0 2025-08-05 16:48:53 -04:00
Taylor Wilsdon db1ae95425 version 2025-08-05 16:48:47 -04:00
Taylor Wilsdon b0e0825b44 chore: release v1.2.0 2025-08-05 16:47:19 -04:00
Taylor Wilsdon 2257e93a80 Merge pull request #137 from taylorwilsdon/oauth_2.1
feat: Full Client to Server OAuth 2.1 Implementation - 06/18 MCP Spec
2025-08-05 16:45:59 -04:00
Taylor Wilsdon 9059691b85 Merge branch 'oauth_2.1' of github.com:taylorwilsdon/google_workspace_mcp into oauth_2.1 2025-08-05 16:42:51 -04:00
Taylor Wilsdon 96f0e234ca dynamic scope awareness 2025-08-05 16:42:46 -04:00
Taylor Wilsdon d8a6f76981 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into oauth_2.1 2025-08-05 16:42:17 -04:00
Taylor Wilsdon 13dad56607 Update auth/oauth_common_handlers.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-05 16:39:19 -04:00
Taylor Wilsdon b9361647ca Update auth/service_decorator.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-05 16:38:12 -04:00
Taylor Wilsdon 8df528d8fe Merge pull request #142 from yairwein/fix-google-slides-thumbnail-api
Fix Google Slides getThumbnail API parameter names
2025-08-05 16:23:39 -04:00
Taylor Wilsdon 2f08cec133 logging cleanup 2025-08-05 15:58:22 -04:00
Taylor Wilsdon c861d7484a only register endpoints if googleauthprovider not available 2025-08-05 14:54:48 -04:00
Taylor Wilsdon 7593163506 fully working in all transport modes and fallbacks! 2025-08-05 14:34:11 -04:00
Taylor Wilsdon 63ead78f91 dotenv update 2025-08-05 11:53:31 -04:00
Taylor Wilsdon 58d9c4464e dotenv example 2025-08-05 11:47:41 -04:00
Taylor Wilsdon 61f3e38f0a readme update 2025-08-05 11:44:06 -04:00
Taylor Wilsdon fd8935e7cd readme update 2025-08-05 11:43:53 -04:00
Yair Weinberger 14e11a3b07 Fix Google Slides getThumbnail API parameter names
The getThumbnail API call was using incorrect parameter name
`thumbnailPropertiesImageSize` instead of the flattened parameter
names required by the Google API Python client:
- `thumbnailProperties_thumbnailSize`
- `thumbnailProperties_mimeType`

This fix aligns with the official Google API Python client
documentation for nested query parameters.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-05 18:30:10 +03:00
Taylor Wilsdon e03b10c024 fix stdio 2025-08-05 11:22:22 -04:00
Taylor Wilsdon ee792b65d8 refac to remove duplicate OAuth 2.1 routes in core/server.py 2025-08-05 11:00:53 -04:00
Taylor Wilsdon e54450cdad refac to remove duplicate OAuth 2.1 routes in core/server.py 2025-08-05 11:00:48 -04:00
Taylor Wilsdon 07c065c57b Created a _process_request_for_auth helper method 2025-08-05 10:44:27 -04:00
Taylor Wilsdon 0967594097 completely working 2025-08-05 10:22:01 -04:00
Taylor Wilsdon 3012880098 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into oauth_2.1 2025-08-04 18:22:40 -04:00
Taylor Wilsdon 6fcefd599b Merge pull request #140 from benjaminjackson/main
Add threaded replies, CC and BCC to Gmail send/draft functions
2025-08-04 10:31:53 -04:00
Benjamin Jackson e061ed1a82 Add CC and BCC support to Gmail send and draft functions 2025-08-04 12:56:38 +02:00
Benjamin Jackson f8e859dc9e Refactor Gmail email preparation logic to eliminate code duplication 2025-08-04 12:53:04 +02:00
Benjamin Jackson bdb06a41f1 Add email threading support to Gmail send functionality
- Add thread_id, in_reply_to, and references parameters for proper reply threading
- Auto-format reply subjects with 'Re:' prefix when replying
- Include proper email headers for threading (In-Reply-To, References)
- Add examples for both new emails and reply emails in docstring
- Achieve feature parity between send_gmail_message and draft_gmail_message
2025-08-04 12:48:38 +02:00
Benjamin Jackson c5354554b6 Add email threading support to Gmail draft functionality
- Add thread_id, in_reply_to, and references parameters for proper reply threading
- Auto-format reply subjects with 'Re:' prefix when replying
- Include proper email headers for threading (In-Reply-To, References)
- Add examples for both new drafts and reply drafts in docstring
2025-08-04 12:41:01 +02:00
Taylor Wilsdon 71e2f1ba3e Enhanced Session Management better guardrails 2025-08-03 15:51:04 -04:00
Taylor Wilsdon ff9b7ecd07 cleanup 2025-08-03 12:19:19 -04:00
Taylor Wilsdon ff6845c86d unfuck client registration 2025-08-03 12:15:44 -04:00
Taylor Wilsdon 737e4ea807 cleanup oauth routes 2025-08-03 12:00:41 -04:00
Taylor Wilsdon ba48a4803d refac bridge and context modules, absorb essential functioanlity into oaauth21sessionstore 2025-08-03 11:27:50 -04:00
Taylor Wilsdon bb55feed83 cleanup redundant session stores 2025-08-03 11:12:58 -04:00
Taylor Wilsdon 065889fede refactor to clean up scopes 2025-08-03 10:30:12 -04:00
Taylor Wilsdon 2836f6c45f refactor to clean up scopes 2025-08-03 10:30:04 -04:00
Taylor Wilsdon d5949ee5b1 validate jwks, fix service decorator session handling 2025-08-03 10:07:55 -04:00
Taylor Wilsdon 2a4118bb65 fix all ruff check issues 2025-08-02 18:55:35 -04:00
Taylor Wilsdon e37803240a everything working, including session correlation and service decorator oauth awareness 2025-08-02 18:50:49 -04:00
Taylor Wilsdon c45bb3956c oauth2.1 truly works 2025-08-02 18:25:08 -04:00
Taylor Wilsdon 9470a41dde almost there, working out session persistence 2025-08-02 15:40:23 -04:00
Taylor Wilsdon 06ef1223dd cleanup 2025-08-02 14:33:33 -04:00
Taylor Wilsdon 5aae243b22 minimal fastmcp based oauth working 2025-08-02 14:32:42 -04:00
Taylor Wilsdon b2f5ec1052 successful client to server flow, not passing through. overcomplicated. need to refactor based on new fastmcp oauth wrapper 2025-08-02 10:38:11 -04:00
Taylor Wilsdon dad52829f8 oauth2.1 working - quick flow in mcp inspector 2025-08-02 09:52:16 -04:00
Taylor Wilsdon 8d053680c0 merge 2025-08-01 13:19:09 -04:00
Taylor Wilsdon 6cb5b05da1 dxt bump 2025-08-01 12:18:11 -04:00
Taylor Wilsdon add4e9b114 chore: release v1.1.17 2025-08-01 12:15:37 -04:00
Taylor Wilsdon 7385ad2e6c version 2025-08-01 12:14:18 -04:00
Taylor Wilsdon e9efcde434 chore: release v1.1.17 2025-08-01 12:13:50 -04:00
Taylor Wilsdon 3992ab9cfb version 2025-08-01 12:13:04 -04:00
Taylor Wilsdon c48beb02e5 chore: release v1.1.17 2025-08-01 12:12:12 -04:00
Taylor Wilsdon edfd4b34a5 version 2025-08-01 12:12:01 -04:00
Taylor Wilsdon 4cf0df270f version 2025-08-01 12:10:17 -04:00
Taylor Wilsdon b9aba4bf1f chore: release v1.1.17 2025-08-01 12:04:14 -04:00
Taylor Wilsdon e92364b1c0 version 2025-08-01 12:04:04 -04:00
Taylor Wilsdon 64c70b4885 chore: release v1.1.17 2025-08-01 12:01:02 -04:00
Taylor Wilsdon 50d866fe71 version 2025-08-01 12:00:58 -04:00
Taylor Wilsdon 54d7c6dffa chore: release v1.1.17 2025-08-01 12:00:30 -04:00
Taylor Wilsdon 45f1fe733d remove server_url 2025-08-01 11:59:04 -04:00
Taylor Wilsdon 4b349bebb6 upgrade fastmcp version 2025-08-01 11:54:48 -04:00
Taylor Wilsdon 5ffc0437f7 add docstrings - thanks gyliu513 2025-07-31 10:00:49 -04:00
Taylor Wilsdon 51c959b25b chore: release v1.1.16 2025-07-30 10:23:02 -04:00
Taylor Wilsdon 3cf157d3be dxt update 2025-07-30 10:22:39 -04:00
Taylor Wilsdon 89ec86a330 Merge pull request #134 from taylorwilsdon/google_search
feat: Google Custom Search / Programmable Search Engine (PSE) Support
2025-07-30 10:21:45 -04:00
Taylor Wilsdon e89642d259 Update manifest.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-30 10:21:12 -04:00
Taylor Wilsdon 5da681947b dxt support for pse 2025-07-30 10:20:16 -04:00
Taylor Wilsdon 9505f2a3c5 add engine id key 2025-07-30 10:18:00 -04:00
Taylor Wilsdon 113a37d5c1 fix package registration 2025-07-30 10:12:09 -04:00
Taylor Wilsdon 2aea2325bc pse api key & docs 2025-07-30 10:04:09 -04:00
Taylor Wilsdon f77f4d742d add google pse support 2025-07-30 09:52:10 -04:00
Taylor Wilsdon 33c6484a74 chore: release v1.1.15 2025-07-28 13:38:57 -04:00
Taylor Wilsdon 4aad256779 update dxt 2025-07-28 13:38:44 -04:00
Taylor Wilsdon 5f90604b9e preserve existing fields dedupe logic 2025-07-28 13:37:01 -04:00
Taylor Wilsdon 4930d37028 Merge pull request #131 from taylorwilsdon/issues/129
feat: Google Meet support for create and edit event, fix move attributes
2025-07-28 13:36:30 -04:00
Taylor Wilsdon 0d829fcebf add google meet link support to create and edit event methods 2025-07-28 13:25:02 -04:00
Taylor Wilsdon 247928668c chore: release v1.1.14 2025-07-28 11:54:49 -04:00
Taylor Wilsdon a205617684 update dxt 2025-07-28 11:54:42 -04:00
Taylor Wilsdon fd94ae37a0 Merge pull request #128 from taylorwilsdon/api_enablement_handler
enh: Add instructions for LLM if API is not enabled
2025-07-28 11:53:48 -04:00
Taylor Wilsdon df6ee3d266 Update core/api_enablement.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-28 11:53:39 -04:00
Taylor Wilsdon 8939b9b045 Update core/api_enablement.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-28 11:53:33 -04:00
Taylor Wilsdon b4743d2f16 add instructions for llm if api not enabled 2025-07-28 11:49:01 -04:00
Taylor Wilsdon 18bf5c5ebf Update README.md 2025-07-28 11:34:52 -04:00
Taylor Wilsdon edb962d616 chore: release v1.1.13 2025-07-26 16:58:53 -04:00
Taylor Wilsdon 5a74a5f329 update dxt 2025-07-26 16:58:42 -04:00
Taylor Wilsdon ca0b7f8931 Merge pull request #125 from taylorwilsdon/better_auth_fails
enh: add more elegant handling for oauth server startup in stdio mode
2025-07-26 16:57:40 -04:00
Taylor Wilsdon 2d50a73518 threadlock for oauth server teardown 2025-07-26 16:56:47 -04:00
Taylor Wilsdon 701bbe999a threadlock for oauth server teardown 2025-07-26 16:56:14 -04:00
Taylor Wilsdon 16c32e93fb fix threading communication issue 2025-07-26 16:44:02 -04:00
Taylor Wilsdon 05c1c3b8f3 better logic 2025-07-26 16:38:08 -04:00
Taylor Wilsdon 0fb75221bf improve minimal oauth healthcheck in stdio mode 2025-07-26 16:35:03 -04:00
Taylor Wilsdon 21ebff4b8a added same server availability check that exists in start_google_auth to the start_auth_flow function 2025-07-26 16:20:57 -04:00
Taylor Wilsdon 19fe08a37f add more elegant handling for oauth server startup in stdio mode 2025-07-26 16:02:31 -04:00
Taylor Wilsdon dcff055235 update dxt 2025-07-26 12:36:37 -04:00
Taylor Wilsdon d14dbcf318 chore: release v1.1.12 2025-07-26 12:35:58 -04:00
Taylor Wilsdon 971fff18d1 chore: release v1.1.11 2025-07-26 12:35:53 -04:00
Taylor Wilsdon a12db3c1d9 uv sync 2025-07-26 12:35:49 -04:00
Taylor Wilsdon e43b7ae0e8 chore: release v1.1.11 2025-07-26 12:34:37 -04:00
Taylor Wilsdon 1b1e4a664f uv sync 2025-07-26 12:34:32 -04:00
Taylor Wilsdon 74faf662ae Merge pull request #121 from Manamama-Gemini-Cloud-AI-01/feature/gcal-query-param
Feature/gcal query param
2025-07-26 12:33:17 -04:00
Taylor Wilsdon e374b77a9a Update README.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-26 12:33:09 -04:00
Taylor Wilsdon 9f03aeef29 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feature/gcal-query-param 2025-07-26 12:28:51 -04:00
Taylor Wilsdon db4ca0e9d3 Merge pull request #124 from taylorwilsdon/remove_mcp_session_id
Remove mcp_session_id from project entirely
2025-07-26 12:28:41 -04:00
Taylor Wilsdon f0976514e2 remove mcp session id 2025-07-26 12:05:22 -04:00
Taylor Wilsdon 0aeed0cc16 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp 2025-07-26 11:32:29 -04:00
Taylor Wilsdon 0a6d2ccd58 add instant start for mcpo 2025-07-26 11:32:27 -04:00
Taylor Wilsdon 65d60bc936 Update pyproject.toml 2025-07-26 11:31:59 -04:00
Taylor Wilsdon e760e8800f Update calendar_tools.py 2025-07-26 11:31:19 -04:00
Taylor Wilsdon f3f24bd6b6 Delete google_workspace_mcp_guide.md 2025-07-25 18:04:43 -04:00
Taylor Wilsdon 1b92e5217f Delete GEMINI.md 2025-07-25 18:04:31 -04:00
Gemini AI Agent 59cc54d80e docs: Update README.md to reflect Python 3.10+ compatibility 2025-07-25 20:48:06 +02:00
Gemini AI Agent ecd463ac31 feat(gcal): Add 'query' parameter to get_events tool
This commit introduces the 'query' parameter to the get_events tool,
enabling keyword-based searching for Google Calendar events.

The underlying Google Calendar API's events.list method supports a 'q'
parameter for free-text search across event fields (summary, description,
location). This enhancement exposes that functionality directly through
the get_events tool, improving efficiency and usability.

- Updated gcalendar/calendar_tools.py to include 'query' parameter.
- Bumped project version to 1.1.11 in pyproject.toml.
- Documented the new 'query' parameter in google_workspace_mcp_guide.md.
2025-07-25 20:29:13 +02:00
Taylor Wilsdon 93b11f930b Update README.md 2025-07-23 18:30:14 -04:00
Taylor Wilsdon 07de49dece chore: release v1.1.10 2025-07-23 16:38:07 -04:00
Taylor Wilsdon f726512e6c version 2025-07-23 16:37:58 -04:00
Taylor Wilsdon 1c49614c84 downcase quick fix 2025-07-23 16:36:16 -04:00
Taylor Wilsdon 0ff0ea1dbc chore: release v1.1.9 2025-07-23 14:45:38 -04:00
Taylor Wilsdon 17cbc6c01e version 2025-07-23 14:45:33 -04:00
Taylor Wilsdon 5634589935 chore: release v1.1.9 2025-07-23 14:45:16 -04:00
Taylor Wilsdon a3e80567ec version 2025-07-23 14:45:13 -04:00
Taylor Wilsdon d4b0c7c897 chore: release v1.1.9 2025-07-23 14:45:01 -04:00
Taylor Wilsdon e3823d94c0 version 2025-07-23 14:44:57 -04:00
Taylor Wilsdon ce1ac4d3ef chore: release v1.1.9 2025-07-23 14:43:48 -04:00
Taylor Wilsdon 1d5492a4ab version 2025-07-23 14:43:44 -04:00
Taylor Wilsdon 40d5eab116 chore: release v1.1.9 2025-07-23 14:43:02 -04:00
Taylor Wilsdon 61e090d01f version 2025-07-23 14:42:57 -04:00
Taylor Wilsdon 56e72d0ff7 chore: release v1.1.9 2025-07-23 14:42:33 -04:00
Taylor Wilsdon 0bba7c30a7 version 2025-07-23 14:42:27 -04:00
Taylor Wilsdon 453c8bdf00 chore: release v1.1.9 2025-07-23 14:40:42 -04:00
Taylor Wilsdon 46b4a59770 dxt update 2025-07-23 14:40:20 -04:00
Taylor Wilsdon 44df5e33d9 Merge branch 'issues/115' 2025-07-23 14:36:51 -04:00
Taylor Wilsdon 61d1f05fdf ruff fixes 2025-07-23 14:36:32 -04:00
Taylor Wilsdon e424628358 Merge pull request #117 from taylorwilsdon/issues/115
fix: SSL Connection Pool Exhaustion in Gmail Batch API
2025-07-23 14:35:29 -04:00
Taylor Wilsdon ed90e3c06c Update gmail/gmail_tools.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-23 14:33:39 -04:00
Taylor Wilsdon 5dadf47480 fixes 2025-07-23 14:01:02 -04:00
Taylor Wilsdon 8727d5180d Update gmail/gmail_tools.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-23 13:58:15 -04:00
Taylor Wilsdon 28d4cc87f1 implement graceful handling for sequential processing to prevent SSL connection storms 2025-07-23 12:40:46 -04:00
Taylor Wilsdon 3015f69569 Update README.md 2025-07-20 15:44:35 -04:00
Taylor Wilsdon 9b104f4b67 Merge pull request #114 from taylorwilsdon/issues-113
feat: Support tabs in get_doc_content
2025-07-19 19:43:57 -04:00
Taylor Wilsdon 1b59b2d30c tab header format and level parameter 2025-07-19 19:41:25 -04:00
Taylor Wilsdon 61b964f7a8 fix infinite recursion bug 2025-07-19 19:39:04 -04:00
Taylor Wilsdon 78c676c017 add support for tabs 2025-07-19 19:34:26 -04:00
Taylor Wilsdon ad981dbd98 oauth2.1 stub 2025-07-19 19:33:55 -04:00
Taylor Wilsdon b3e64fc67c Merge pull request #108 from jihunkim0/107-batch-modify-labels
feat: add batch modification of gmail labels
2025-07-18 18:22:54 -04:00
Taylor Wilsdon 048b568c73 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into 107-batch-modify-labels 2025-07-18 18:18:28 -04:00
Taylor Wilsdon 553aedf0d3 Merge pull request #111 from taylorwilsdon/ruff_check
fix: resolve all ruff check errors
2025-07-18 18:16:17 -04:00
Taylor Wilsdon aca7fd4769 restore scopes 2025-07-18 18:09:59 -04:00
Taylor Wilsdon d4dc255f16 resolve all ruff check errors 2025-07-18 18:04:06 -04:00
Jihun Kim 3331048aa1 feat: add batch modification of gmail labels
This commit introduces a new function, , to . This function leverages the  endpoint of the Gmail API to allow for the modification of labels on multiple messages in a single API call.

Fixes #107
2025-07-18 05:32:00 +01:00
Taylor Wilsdon 9f65f0f438 chore: release v1.1.8 2025-07-17 16:43:15 -04:00
Taylor Wilsdon a48d2ec55f chore: release v1.1.7 2025-07-17 16:42:54 -04:00
Taylor Wilsdon 9fbdc2c1ed chore: release v1.1.6 2025-07-17 16:41:46 -04:00
Taylor Wilsdon 75d91e71f2 update dxt 2025-07-17 16:39:27 -04:00
Taylor Wilsdon 68d8009d95 Merge pull request #105 from jihunkim0/feature/104-add-batch-thread-retrieval
Feature: Add get_gmail_threads_content_batch function
2025-07-17 16:32:05 -04:00
Taylor Wilsdon 1760f50943 Update gmail/gmail_tools.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-17 15:43:08 -04:00
Taylor Wilsdon 6a96b9e26d fmt 2025-07-17 15:37:00 -04:00
Taylor Wilsdon a6a846453c merge main in 2025-07-17 15:31:52 -04:00
Taylor Wilsdon 46afbecdbe Merge pull request #106 from taylorwilsdon/fix/gmail-ssl-retry-99
fix: Fix/gmail ssl retry 99
2025-07-17 15:27:17 -04:00
Taylor Wilsdon ad546b991c upstream 2025-07-17 14:50:20 -04:00
Taylor Wilsdon e9c5625e72 refac bulk thread retrieval 2025-07-17 14:46:25 -04:00
Taylor Wilsdon 367ae9fd6d Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feature/104-add-batch-thread-retrieval 2025-07-17 14:36:49 -04:00
Taylor Wilsdon 072485e67e formatting 2025-07-17 14:23:01 -04:00
Taylor Wilsdon f08373a8b2 consolidate the retry mechanism into the handle_http_errors decorator, mitigates idempotency risks by limiting retries to read-only operations 2025-07-17 13:57:21 -04:00
Jihun Kim d8aab6fb92 feat: add get_gmail_threads_content_batch
Implements the  function to allow fetching multiple threads at once.

Fixes #104
2025-07-17 11:30:03 +01:00
Taylor Wilsdon 181ffb650d Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into fix/gmail-ssl-retry-99 2025-07-16 17:35:35 -04:00
Taylor Wilsdon c2ea42f895 Update README.md 2025-07-16 12:29:48 -04:00
Taylor Wilsdon 4fde832c6a Update README.md 2025-07-16 12:29:14 -04:00
Jihun Kim f916631017 Add mcp_debug logs to gitignore 2025-07-14 15:42:58 +01:00
jihunkim0 11e5516027 Delete mcp_server_debug.log
Not needed
2025-07-14 15:29:12 +01:00
Jihun Kim a92748b947 refactor: apply SSL retry decorator to all tool modules 2025-07-14 15:08:03 +01:00
Jihun Kim 6a32a411f9 fix: correct syntax error in gmail_tools.py 2025-07-14 14:47:20 +01:00
Jihun Kim 6c2578d1ca refactor: implement retry decorator for gmail tools
This change introduces a decorator to handle SSL errors
and applies it to all network-bound functions in the
gmail_tools module, making them more resilient to
transient network issues.

Fixes #99
2025-07-14 14:43:54 +01:00
Jihun Kim 4e4b522a39 feat: add retry for get_gmail_thread_content
Fixes #99
2025-07-14 14:37:01 +01:00
Taylor Wilsdon 1650561ebd Merge pull request #97 from taylorwilsdon/issues/93
fix: cwd -> directory for claude json configs
2025-07-11 11:46:35 -07:00
Taylor Wilsdon f7bb57accf Update README.md 2025-07-11 11:46:21 -07:00
Taylor Wilsdon c764b73109 cwd -> directory 2025-07-11 11:43:30 -07:00
Taylor Wilsdon ce9630ca8f Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp 2025-07-10 15:47:00 -04:00
Taylor Wilsdon e97d71c84a add dep for dockerfile 2025-07-10 15:46:38 -04:00
Taylor Wilsdon bf3e036450 Update README.md 2025-07-10 15:36:36 -04:00
Taylor Wilsdon b5d417781c Update README.md 2025-07-10 15:35:39 -04:00
Taylor Wilsdon 3c932c1d75 Update README.md 2025-07-10 15:21:43 -04:00
Taylor Wilsdon a74dd4659f Update README.md 2025-07-10 15:13:14 -04:00
Taylor Wilsdon eb8af9c4c3 chore: release v1.1.5 2025-07-10 14:54:11 -04:00
Taylor Wilsdon 09d1fd4c3c Merge pull request #94 from taylorwilsdon/update_redirect_uir
enh: Better Redirect URI handling, DXT on rails
2025-07-10 14:53:27 -04:00
Taylor Wilsdon 978665fc7c Merge branch 'update_redirect_uir' of github.com:taylorwilsdon/google_workspace_mcp into update_redirect_uir 2025-07-10 14:49:06 -04:00
Taylor Wilsdon e263937453 remove details tag 2025-07-10 14:47:20 -04:00
Taylor Wilsdon 457adda8c3 Update manifest.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-10 14:45:44 -04:00
Taylor Wilsdon 3a8f7793cf update dxt again 2025-07-10 14:37:38 -04:00
Taylor Wilsdon 28a31904d7 clean up stdio 2025-07-10 14:33:24 -04:00
Taylor Wilsdon 9afdcf1b2b Merge branch 'update_redirect_uir' of github.com:taylorwilsdon/google_workspace_mcp into update_redirect_uir 2025-07-10 14:13:40 -04:00
Taylor Wilsdon 50ebe1fe03 update dxt package 2025-07-10 14:12:41 -04:00
Taylor Wilsdon 21c71cd287 cleanup 2025-07-10 14:08:08 -04:00
Taylor Wilsdon 44e9451b98 cleanup 2025-07-10 14:07:30 -04:00
Taylor Wilsdon 6016fb8dbe cleanup imports 2025-07-10 14:06:00 -04:00
Taylor Wilsdon a2fec7dcdd fix imports in auth 2025-07-10 14:05:08 -04:00
Taylor Wilsdon c7317cd186 pass env from dxt config 2025-07-10 13:58:26 -04:00
Taylor Wilsdon 78e04138bc Update manifest.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-10 13:47:41 -04:00
Taylor Wilsdon 353c387e28 update dxt pack 2025-07-10 13:38:29 -04:00
Taylor Wilsdon 7ec7e17c4d udpate dxt bundle 2025-07-10 13:34:08 -04:00
Taylor Wilsdon 4a44986506 improve dxt, update readme 2025-07-10 13:33:27 -04:00
Taylor Wilsdon 7233fe1ee9 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into update_redirect_uir 2025-07-10 12:35:38 -04:00
Taylor Wilsdon 57b18057cf chore: release v1.1.4 2025-07-10 08:05:00 -04:00
Taylor Wilsdon 7693c0809c stage 2025-07-10 08:04:27 -04:00
Taylor Wilsdon 336007349d stage 2025-07-10 08:04:07 -04:00
Taylor Wilsdon 8f1e828ac1 Update README.md 2025-07-09 19:05:09 -04:00
Taylor Wilsdon fcca35041b Update README.md 2025-07-09 19:04:26 -04:00
Taylor Wilsdon df4d474f24 Merge pull request #91 from taylorwilsdon/google_tasks
feat: Google Tasks Support
2025-07-09 12:10:13 -04:00
Taylor Wilsdon 3fe6367c56 fix casing 2025-07-09 11:59:01 -04:00
Taylor Wilsdon 2f229847fe Update readme for google tasks functionality 2025-07-09 11:58:45 -04:00
Taylor Wilsdon 75bb6c4d90 Add support for Google Tasks 2025-07-09 11:54:46 -04:00
Taylor Wilsdon 8adf719c58 add google tasks 2025-07-09 11:54:23 -04:00
Taylor Wilsdon f0cfe40045 chore: release v1.1.3 2025-07-06 10:25:33 -04:00
Taylor Wilsdon 5b917be355 fix docker healthcheck for nonstandard ports 2025-07-06 10:25:17 -04:00
Taylor Wilsdon 56e9cd829e fix port expose 2025-07-05 15:59:39 -04:00
Taylor Wilsdon fd09de57a3 chore: release v1.1.2 2025-07-05 15:19:02 -04:00
Taylor Wilsdon 3d66372b18 Merge pull request #85 from taylorwilsdon/readme_and_cleanup
enh: Update Readme & Helper Cleanup
2025-07-05 15:16:58 -04:00
Taylor Wilsdon 91742faca0 add dxt claude installer 2025-07-05 15:14:48 -04:00
Taylor Wilsdon a026b7a1f7 dxt build 2025-07-05 15:12:06 -04:00
Taylor Wilsdon 7b7be5f7f1 Merge pull request #84 from TamimiGitHub/main
Update manifest.json
2025-07-05 15:04:02 -04:00
Taylor Wilsdon a689f46df3 chore: release v1.1.1 2025-07-05 15:02:43 -04:00
Taylor Wilsdon 2cb9243dbe reorg 2025-07-05 14:58:01 -04:00
Taylor Wilsdon 5ac597c5dc udpate readme 2025-07-04 16:37:54 -04:00
Taylor Wilsdon 5df261c1d7 chore: release v1.1.0 2025-07-04 16:29:50 -04:00
Taylor Wilsdon 5f6437cbe3 fix startup logic 2025-07-04 16:21:56 -04:00
Taylor Wilsdon 9f8a639904 chore: release v1.0.6 2025-07-04 16:10:06 -04:00
Taylor Wilsdon 6f48a04545 Update stdio startup and credentails path for easier claude desktop autoinstall 2025-07-04 16:10:01 -04:00
Tamimi Ahmad 29ced2a006 Update manifest.json
Change OAUTHLIB_INSECURE_TRANSPORT type to int
2025-07-04 12:43:50 -07:00
Taylor Wilsdon f4b8e0452b chore: release v1.0.5 2025-07-04 15:36:24 -04:00
Taylor Wilsdon d9a1404a03 udpate claude installer script 2025-07-04 15:36:13 -04:00
Taylor Wilsdon 5bc4e22592 chore: release v1.0.4 2025-07-04 14:58:30 -04:00
Taylor Wilsdon f30ef88334 Merge pull request #83 from taylorwilsdon/feat/get-user-gmail-from-enviroment-var
Feat/get user gmail from enviroment var
2025-07-04 14:57:29 -04:00
Taylor Wilsdon 0eae81fa56 Update README.md 2025-07-04 14:57:20 -04:00
Taylor Wilsdon 994ff9f7d4 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feat/get-user-gmail-from-enviroment-var 2025-07-04 14:56:06 -04:00
Taylor Wilsdon 7ed23189ab merge 2025-07-04 14:56:03 -04:00
Taylor Wilsdon 9deaa188c8 Merge pull request #82 from bukhr/feat/get-user-gmail-from-enviroment-var
feat: get user google email from environment var
2025-07-04 14:55:46 -04:00
Taylor Wilsdon 67bd57c62d update readme 2025-07-04 12:40:17 -04:00
Taylor Wilsdon 64754077f4 Merge pull request #81 from taylorwilsdon/comments_errywhere
feat: Support comments everywhere via centralized module
2025-07-04 10:35:48 -04:00
Taylor Wilsdon bbee9f4db7 Merge branch 'comments_errywhere' of github.com:taylorwilsdon/google_workspace_mcp into comments_errywhere 2025-07-03 19:38:02 -04:00
Taylor Wilsdon 50981d61aa fix resolve comment, all good 2025-07-03 19:37:45 -04:00
Taylor Wilsdon f8e1f1e1d2 degoogle 2025-07-02 12:06:16 -04:00
Taylor Wilsdon f371995dec Update core/comments.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-02 12:04:26 -04:00
Taylor Wilsdon 579fe3f0fc modular af 2025-07-01 18:56:53 -07:00
Taylor Wilsdon 83284d5f9a better tool naming 2025-07-01 18:02:08 -07:00
Taylor Wilsdon 878ab3b1f6 break out as actual tools 2025-07-01 17:32:34 -07:00
Taylor Wilsdon 62fde10ce2 update readme for comments + slides 2025-07-01 17:16:35 -07:00
Taylor Wilsdon 7ce96edc48 modularize comments, add smithery 2025-07-01 17:14:30 -07:00
Taylor Wilsdon f5b9a6ff52 another attempt at smithery 2025-06-29 16:56:50 -07:00
Taylor Wilsdon 4ce6203709 Update README.md 2025-06-29 16:34:07 -07:00
Taylor Wilsdon f6343b9303 chore: release v1.0.3 2025-06-28 14:30:33 -07:00
Taylor Wilsdon f24940f825 Merge pull request #79 from taylorwilsdon/dxt_install
add dxt install capability
2025-06-28 14:02:19 -07:00
Taylor Wilsdon fc89a20c64 add dxt install capability 2025-06-28 14:02:06 -07:00
Taylor Wilsdon 2dd9aebbc2 Update README.md 2025-06-28 13:42:48 -07:00
Taylor Wilsdon 433e1df42c Merge pull request #78 from taylorwilsdon/oauth_credential_injection
feat: support google client secret injection via environment variables
2025-06-28 13:34:32 -07:00
Taylor Wilsdon d275c405f1 Update auth/google_auth.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-06-28 13:33:44 -07:00
Taylor Wilsdon 33eaa47d0c refactored the credential checking logic into a shared helper function to reduce code duplication 2025-06-28 12:56:43 -07:00
Taylor Wilsdon 5f08c89468 302 GOOGLE_CLIENT_SECRETS to GOOGLE_CLIENT_SECRET_PATH 2025-06-28 12:14:42 -07:00
Taylor Wilsdon fef8479620 add environment variable support for google oauth client secret file generation with fallback to file based 2025-06-28 12:06:36 -07:00
Juanse 6c6cab4d7f feat: get user google email from environment var 2025-06-27 15:44:33 -05:00
Taylor Wilsdon bc2dcaf6f5 Merge pull request #74 from endrec/feature/google-docs-comments
feat: Add Google Docs comment functionality
2025-06-24 19:54:48 -04:00
Endre Czirbesz 010ee9ea18 feat: Add Google Docs comment functionality
- Add read_doc_comments tool to read all comments and replies from Google Docs
- Add reply_to_comment tool to reply to specific comments
- Add create_doc_comment tool to create new comments on documents
- Add resolve_comment tool to resolve comments
- All tools use proper authentication decorators and error handling
- Integrated into existing docs_tools.py for consistency

Enables full comment management workflow for Google Docs through MCP interface.
2025-06-23 13:18:56 +01:00
Taylor Wilsdon 4cec9abb0b Update README.md 2025-06-20 09:34:20 -04:00
Taylor Wilsdon 5fc9179cf8 update readme 2025-06-19 11:13:13 -04:00
Taylor Wilsdon 09ce9eae6d chore: release v1.0.2 2025-06-19 10:46:05 -04:00
Taylor Wilsdon d0c7f24704 cleanup 2025-06-19 10:37:28 -04:00
Taylor Wilsdon 731471827e clean up unused import 2025-06-19 10:36:53 -04:00
Taylor Wilsdon 44254ab87b stash 2025-06-19 10:24:59 -04:00
Taylor Wilsdon 3d99c1b2a0 Merge pull request #66 from nacholupotti/feature/googleCalendarAndDriveAttachment
feat: add support for file attachments in event creation and enhance …
2025-06-18 19:30:25 -04:00
Taylor Wilsdon 4b17462a7b asyncio all up in yo face 2025-06-18 19:24:35 -04:00
Taylor Wilsdon cd5ab74472 fetch actual filename rather than bad placeholder 2025-06-18 18:07:50 -04:00
Taylor Wilsdon 9be4d8da7e Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feature/googleCalendarAndDriveAttachment 2025-06-18 17:36:26 -04:00
Taylor Wilsdon 4e1344b299 Merge pull request #68 from taylorwilsdon/taylorwilsdon-patch-10
Update gmail_tools.py
2025-06-18 17:35:48 -04:00
Taylor Wilsdon 215e83a56a Update gmail_tools.py 2025-06-18 17:31:57 -04:00
Taylor Wilsdon 7ba75e50d4 pyjwt 2025-06-18 17:23:30 -04:00
Taylor Wilsdon f60dc03fc1 fix indent 2025-06-18 17:09:59 -04:00
Taylor Wilsdon 47684dcabe merge upstream, implement handle http error decorator on new func 2025-06-18 17:08:00 -04:00
Taylor Wilsdon 3cb5013699 Merge pull request #67 from taylorwilsdon/service_decorator_and_param
refac: service decorator & httperror handler
2025-06-18 16:45:14 -04:00
Taylor Wilsdon 97edbc4ff8 handle_http_errors decorator to simplify tool error handling 2025-06-18 16:29:35 -04:00
Taylor Wilsdon b6ca27c581 dynamically adjusts the function signature exposed to the MCP server, removing the service parameter from the public API for all decorated tools 2025-06-18 12:21:30 -04:00
Taylor Wilsdon c940d2fc15 Merge branch 'main' into feature/googleCalendarAndDriveAttachment 2025-06-18 11:21:40 -04:00
Taylor Wilsdon 5a7e10e2fe uv lock 2025-06-18 11:20:15 -04:00
Taylor Wilsdon b4feac41e3 remove aiohttp in favor of httpx, restore confirmation_message 2025-06-18 11:12:01 -04:00
Taylor Wilsdon 3e76cac88f Merge pull request #65 from telenieko/patch-1
Explain GOOGLE_CLIENT_SECRETS in README.md
2025-06-18 10:14:35 -04:00
Taylor Wilsdon 11c918e92a Update README.md 2025-06-18 10:14:16 -04:00
Ignacio Lupotti 61df770562 fix: improve logging format for event creation confirmation 2025-06-18 08:30:48 -03:00
Ignacio Lupotti ac6c7e39ff feat: add support for file attachments in event creation and enhance file creation with URL fetching 2025-06-18 08:15:49 -03:00
Marc Fargas 0ebddd6fee Explain GOOGLE_CLIENT_SECRETS in README.md
Currently the only way to find out about configuring the secrets location is by reading the code at https://github.com/taylorwilsdon/google_workspace_mcp/blob/ec480a2aee3eaa76497d9bb75e9269e0594db428/auth/google_auth.py#L30-L39
2025-06-18 12:50:10 +02:00
Taylor Wilsdon ec480a2aee Merge pull request #64 from lwsinclair/add-mseep-badge
Add MseeP.ai badge
2025-06-17 10:28:16 -04:00
Taylor Wilsdon c53c2d5bd8 Update README.md 2025-06-17 10:28:05 -04:00
Lawrence Sinclair f2bf297389 Add MseeP.ai badge to README.md 2025-06-17 12:08:46 +07:00
Taylor Wilsdon b7086e5d32 Update README.md 2025-06-16 20:26:31 -04:00
Taylor Wilsdon 90267e268c Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp 2025-06-16 15:56:56 -04:00
Taylor Wilsdon 5991d30dad 302 jwt->pyjwt 2025-06-16 15:56:51 -04:00
Taylor Wilsdon 383cee75ec Update main.py
dedupe print
2025-06-16 15:44:04 -04:00
Taylor Wilsdon c6dccb521b Merge pull request #63 from nacholupotti/feature/calendarEndsInfoAdded
Feature/calendar ends info added
2025-06-16 15:42:01 -04:00
Taylor Wilsdon 5701c49516 package updates 2025-06-16 15:41:34 -04:00
Taylor Wilsdon 826c13ab54 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feature/calendarEndsInfoAdded 2025-06-16 15:40:29 -04:00
Taylor Wilsdon 008c322950 variable end is now end_time, and the get_events docstring 2025-06-16 15:39:07 -04:00
Taylor Wilsdon 04809cae7b Update main.py 2025-06-16 14:50:43 -04:00
Taylor Wilsdon 2773ba7253 Update main.py
implement unicode safe_print for windows users
2025-06-16 14:46:36 -04:00
Ignacio Lupotti 9184b66b3f fix: include start/end dates in event details output for better clarity 2025-06-16 10:13:43 -03:00
Ignacio Lupotti 03bded0751 add end date 2025-06-15 17:51:05 -03:00
Taylor Wilsdon 4f09547380 fmt 2025-06-15 10:44:07 -04:00
Taylor Wilsdon c83298efb3 chore: release v1.0.1 2025-06-14 14:03:34 -04:00
Taylor Wilsdon cc8fbb91ff prep 0.2.1 2025-06-14 14:03:05 -04:00
Taylor Wilsdon fd123be28e Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp 2025-06-14 13:54:12 -04:00
Taylor Wilsdon 08d15d3589 Merge pull request #59 from taylorwilsdon/release_0.2
Release 1.0.0
2025-06-14 13:54:00 -04:00
Taylor Wilsdon d6d65ab17d Merge branch 'release_0.2' of github.com:taylorwilsdon/google_workspace_mcp into release_0.2 2025-06-14 13:32:36 -04:00
Taylor Wilsdon cc8f782bf4 update tag 2025-06-14 13:32:30 -04:00
Taylor Wilsdon cbda5a61bf Update main.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-06-14 13:30:31 -04:00
Taylor Wilsdon a12cc80716 chore: release v1.0.0 2025-06-14 13:18:05 -04:00
Taylor Wilsdon e329e98752 dynamically pull version 2025-06-14 13:15:36 -04:00
Taylor Wilsdon 375ac40c92 ready 2025-06-14 13:13:17 -04:00
Taylor Wilsdon c7738b63c5 release 2025-06-14 13:11:00 -04:00
Taylor Wilsdon 7be3ba5dba release 2025-06-14 13:05:59 -04:00
Taylor Wilsdon b730811474 Merge branch 'release_0.2' of github.com:taylorwilsdon/google_workspace_mcp into release_0.2 2025-06-14 13:05:38 -04:00
Taylor Wilsdon 29660974af chore: release v0.2.0 2025-06-14 13:05:20 -04:00
Taylor Wilsdon f475e0ad99 chore: release v0.2.0 2025-06-14 13:02:48 -04:00
Taylor Wilsdon 1c2d4546fe main 2025-06-14 13:02:03 -04:00
Taylor Wilsdon 5cde9808dc no toml needed 2025-06-14 12:54:57 -04:00
Taylor Wilsdon 7c79aed64c add toml to deps for release script 2025-06-14 12:53:41 -04:00
Taylor Wilsdon cad204059b Merge pull request #57 from taylorwilsdon/slides_api
feat: Google Slides Native Control
2025-06-12 10:02:25 -04:00
Taylor Wilsdon 0548c66b11 good dockerfile 2025-06-11 18:40:08 -04:00
Taylor Wilsdon bac92db56e add google slides support 2025-06-11 18:24:30 -04:00
Taylor Wilsdon adf515a320 add slides 2025-06-11 14:50:27 -04:00
Taylor Wilsdon 2ffe80290a add google slides support 2025-06-11 14:46:05 -04:00
Taylor Wilsdon 4f9804c336 Update README.md 2025-06-11 12:11:23 -04:00
Taylor Wilsdon c2318e5b9b Merge pull request #56 from punkpeye/glama-badge
add MCP server badge
2025-06-11 11:09:32 -04:00
Taylor Wilsdon 1ff80b1f53 Update README.md
add glama baadge
2025-06-11 11:09:16 -04:00
Frank Fiegel 3960d942e5 add MCP server badge 2025-06-10 13:11:02 -04:00
Taylor Wilsdon 43d8f5bcc3 Merge pull request #55 from georgebashi/uvx-fixes
Fix pyproject.toml for uvx
2025-06-10 11:43:20 -04:00
George Bashi 9d13ff606e Fix pyproject.toml for uvx 2025-06-10 08:34:47 -07:00
Taylor Wilsdon 8206936d0a Merge pull request #54 from taylorwilsdon/scopes_consolidation
refac: deduplicate scopes config
2025-06-09 18:33:11 -04:00
Taylor Wilsdon 3908d6c34c update readme 2025-06-09 18:32:52 -04:00
Taylor Wilsdon 808504928b dedupe, remove circular imports 2025-06-09 17:36:31 -04:00
Taylor Wilsdon 314b94e734 Merge pull request #53 from taylorwilsdon/google_forms
feat: Add support for Google Forms
2025-06-09 17:11:11 -04:00
Taylor Wilsdon 0ec59fcd3c fix service decorator 2025-06-09 16:56:00 -04:00
Taylor Wilsdon d6a9103f82 fix userinfo scope 2025-06-09 16:47:34 -04:00
Taylor Wilsdon dddfbd484f add Google forms support 2025-06-09 16:41:09 -04:00
Taylor Wilsdon de6a5fa355 remove smithery entirely 2025-06-09 13:15:50 -04:00
Taylor Wilsdon f0f36d54aa smithery hates me 2025-06-09 13:01:13 -04:00
Taylor Wilsdon 90c6754872 smithery hates me 2025-06-09 12:37:15 -04:00
Taylor Wilsdon 8d1b492f6d smithery hates me 2025-06-09 10:58:44 -04:00
Taylor Wilsdon dccfede2c5 remove query string test lib 2025-06-09 10:52:00 -04:00
Taylor Wilsdon 5e768dc3fd clean start docker 2025-06-09 10:51:13 -04:00
Taylor Wilsdon 4846641cf7 Fix docker healthcheck at runtime with proper request handling 2025-06-08 14:23:28 -04:00
Taylor Wilsdon 96da15be22 add expiry handling 2025-06-08 12:31:18 -04:00
Taylor Wilsdon 019517beeb respect WORKSPACE_MCP_BASE_URI everywhere 2025-06-08 12:17:06 -04:00
Taylor Wilsdon 05b9ddadb2 gracefully handle refresherrors on expired tokens 2025-06-08 12:04:19 -04:00
Taylor Wilsdon 47c781a6fa add startup check for permissions 2025-06-08 11:50:00 -04:00
Taylor Wilsdon 058c123645 add startup check for permissions 2025-06-08 11:49:25 -04:00
Taylor Wilsdon 5be7e24f80 smithery 2025-06-07 19:17:53 -04:00
Taylor Wilsdon 7f90e24022 smithery 2025-06-07 19:08:16 -04:00
Taylor Wilsdon 08291e3ddf smithery 2025-06-07 18:49:54 -04:00
Taylor Wilsdon 6370b6f2cf fix smithery 2025-06-07 18:12:29 -04:00
Taylor Wilsdon c54e8d30db fix start_auth tool 2025-06-07 17:18:35 -04:00
Taylor Wilsdon 2da4147b39 Update README.md 2025-06-07 16:45:34 -04:00
Taylor Wilsdon 17bd45171d Update README.md 2025-06-07 16:39:39 -04:00
Taylor Wilsdon 9438a6ddf1 Merge pull request #51 from taylorwilsdon/perfection
feat: Perfection
2025-06-07 16:35:38 -04:00
Taylor Wilsdon aca3dc3dfc remove unused import 2025-06-07 16:35:28 -04:00
Taylor Wilsdon 3b8e44b089 really dress this puppy up 2025-06-07 16:16:48 -04:00
Taylor Wilsdon aaa39a5b1b Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into stdio 2025-06-07 16:01:19 -04:00
Taylor Wilsdon 16473c9a2c add http callback server when running in stdio with transport aware startup 2025-06-07 16:01:02 -04:00
Taylor Wilsdon 0f1d7a1787 add http callback server when running in stdio with transport aware startup 2025-06-07 16:00:55 -04:00
Taylor Wilsdon 38115edf2e Merge pull request #50 from taylorwilsdon/stdio
feat: stdio support & docs
2025-06-07 14:20:47 -04:00
Taylor Wilsdon d37dc74eb5 improve startup 2025-06-07 14:19:54 -04:00
Taylor Wilsdon 07dace0dea add stdio support and startup flag 2025-06-07 14:04:04 -04:00
Taylor Wilsdon 5a95e52426 unpin streamable http 2025-06-07 13:59:45 -04:00
Taylor Wilsdon 5a423b83c1 Merge pull request #49 from taylorwilsdon/startup_modes
feat: Startup Modes & refac: README
2025-06-07 12:26:27 -04:00
Taylor Wilsdon a32aa11ea0 center header 2025-06-07 12:25:57 -04:00
Taylor Wilsdon 3c42286546 readme updaates 2025-06-07 12:24:28 -04:00
Taylor Wilsdon 1ae0ed33c9 add startup modes, pretty it up 2025-06-07 12:09:26 -04:00
Taylor Wilsdon 68f6abf89a add claude desktop bootstrap script 2025-06-07 11:37:36 -04:00
Taylor Wilsdon 5e6a835885 update README 2025-06-07 11:35:40 -04:00
Taylor Wilsdon be71e4ecb4 Merge pull request #48 from taylorwilsdon/refactor/fastmcp-native-responses
refac: Refactor Google Service Authentication and Adopt `fastmcp` Native Responses
2025-06-07 10:57:01 -04:00
Taylor Wilsdon e4572e2905 corrected function signature for delete_event 2025-06-07 10:56:46 -04:00
Taylor Wilsdon 449f6006e4 fixed issue was that extract_office_xml_text was being called for all file types, including Google Sheets (application/vnd.google-apps.spreadsheet). Google Sheets are exported as CSV text, not ZIP archives,
so trying to parse them as ZIP files causes the "File is not a valid ZIP archive" warnining
2025-06-07 10:38:26 -04:00
Taylor Wilsdon bfdbd1804b drive_tools auth dectorator 2025-06-07 10:33:30 -04:00
Taylor Wilsdon d9e68a3b1b auth decorator refac docs 2025-06-07 10:23:27 -04:00
Taylor Wilsdon bdfa6682c5 auth decorator for sheets 2025-06-07 10:21:12 -04:00
Taylor Wilsdon c46c9450a9 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into refactor/fastmcp-native-responses 2025-06-07 10:17:23 -04:00
Taylor Wilsdon 0c73f592d3 refac chat tools for auth decorator 2025-06-07 10:17:17 -04:00
Taylor Wilsdon c92f6abdf5 require_google_service decorator for calendar_tools 2025-06-07 10:12:27 -04:00
Taylor Wilsdon 7b016b6448 require_google_service decorator for gmail implemented successfully 2025-06-07 09:50:53 -04:00
Taylor Wilsdon f143998ae7 refac authentication handler 2025-06-06 18:51:34 -04:00
Taylor Wilsdon 100fb4399d refactored all tools to use fastmcp native responses 2025-06-06 17:32:09 -04:00
Taylor Wilsdon c9ecf00bce Update README.md 2025-06-06 15:45:41 -04:00
Taylor Wilsdon 21dccf5915 Merge pull request #47 from taylorwilsdon/sheets_support
feat: Full Google Sheets support
2025-06-06 13:16:32 -04:00
Taylor Wilsdon 047c44b472 update readme 2025-06-06 13:07:16 -04:00
Taylor Wilsdon 6e7246baef add google sheets support 2025-06-06 12:50:32 -04:00
Taylor Wilsdon 1c8c3cb4eb add google sheets support 2025-06-06 12:45:15 -04:00
Taylor Wilsdon d4a07dcef5 Merge pull request #46 from taylorwilsdon/gmail_labels
feat: add support for label management to the gmail tool
2025-06-06 12:05:37 -04:00
Taylor Wilsdon 14de679df2 add support for label management to the gmail tool 2025-06-06 12:02:49 -04:00
Taylor Wilsdon c4b5fa8668 Merge pull request #45 from taylorwilsdon/shared_drives
feat: Add support for shared drives
2025-06-04 19:02:02 -04:00
Taylor Wilsdon 3d5e5a5223 precompile regex patterns as module-level constants to improve performance 2025-06-04 19:01:48 -04:00
Taylor Wilsdon e27a022f55 refactored the list_params construction into helper for search & list functions 2025-06-04 18:50:53 -04:00
Taylor Wilsdon 62a1adaf9e refac & cleanup 2025-06-04 18:48:17 -04:00
Taylor Wilsdon a5c294b166 improve search pattern detection logic 2025-06-04 18:47:16 -04:00
Taylor Wilsdon dfd93fe399 add support for shared drives 2025-06-04 18:13:45 -04:00
Taylor Wilsdon b0d7638605 minor refac for consistency, cleanup unused imports 2025-06-03 14:16:55 -04:00
Taylor Wilsdon b0bfaff691 minor refac for consistency, cleanup unused imports 2025-06-03 14:16:19 -04:00
Taylor Wilsdon 93e0007ee5 update imports for calendar_tools 2025-06-03 14:13:22 -04:00
Taylor Wilsdon 30a8ba432e clean up auth logic in server.py 2025-06-03 14:12:49 -04:00
Taylor Wilsdon 3b5071980d Update google_config with new scopes 2025-06-03 14:12:01 -04:00
Taylor Wilsdon c9a0aff6a1 fix scope 2025-06-03 13:15:28 -04:00
Taylor Wilsdon 614648ce8d add chat scopes 2025-06-03 13:12:53 -04:00
Taylor Wilsdon 4046875cfc fix redirect uri import, add chat stub 2025-06-03 13:03:26 -04:00
Taylor Wilsdon 313630e3c5 Update README.md 2025-06-03 07:58:15 -04:00
Taylor Wilsdon 6ba3ec01b7 Update pyproject.toml 2025-05-31 20:07:40 -04:00
Taylor Wilsdon b67c7277e6 Update pyproject.toml 2025-05-31 20:05:18 -04:00
Taylor Wilsdon f398de0001 Update pyproject.toml 2025-05-31 19:58:39 -04:00
Taylor Wilsdon 7fec4e6f93 Merge pull request #41 from taylorwilsdon/smithery/config-hi1w
Deployment: Dockerfile and Smithery config
2025-05-31 11:47:36 -04:00
Taylor Wilsdon 647539e363 Update README.md 2025-05-31 11:47:15 -04:00
smithery-ai[bot] a3a7fb2659 Update README 2025-05-31 15:41:38 +00:00
smithery-ai[bot] 765bcc58b0 Add Smithery configuration 2025-05-31 15:41:37 +00:00
Taylor Wilsdon 207b131791 Merge pull request #39 from taylorwilsdon/fastmcp_refac
refac: fastmcp custom implementation to standard
2025-05-31 11:39:43 -04:00
Taylor Wilsdon fbfe1518da Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into fastmcp_refac 2025-05-31 11:39:28 -04:00
Taylor Wilsdon 21cc577434 Update README.md 2025-05-31 09:34:24 -04:00
Taylor Wilsdon 3d338290aa add run 2025-05-30 11:45:33 -04:00
Taylor Wilsdon 13b39f7453 transport type 2025-05-30 11:38:11 -04:00
Taylor Wilsdon 395d02494b refac fastmcp custom implementation to standard 2025-05-30 11:09:56 -04:00
Taylor Wilsdon b00fe41de8 Merge pull request #34 from taylorwilsdon/batch_concurrency
feat: Implement Gmail batch message content retrieval
2025-05-27 11:55:04 -04:00
Taylor Wilsdon fd539ad0c7 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into batch_concurrency 2025-05-27 11:52:25 -04:00
Taylor Wilsdon 8970e75e72 Merge pull request #38 from taylorwilsdon/issues/37
fix: Issues/37
2025-05-27 11:52:01 -04:00
Taylor Wilsdon 02dd22f40b sed MediaIoBaseDownload for MediaIoBaseUpload 2025-05-27 11:49:20 -04:00
Taylor Wilsdon 441455b864 refac docs_tools to use get_authenticated_google_service 2025-05-27 11:46:54 -04:00
Taylor Wilsdon 334b16f9d2 add concurrent batch retrieval for gmail messages 2025-05-26 19:00:27 -04:00
Taylor Wilsdon c6ca4a47ba Merge pull request #32 from MariusWilsch/feature/gmail-search-xml-links
feat: enhance Gmail search with XML structure and web interface links
2025-05-26 18:38:48 -04:00
Taylor Wilsdon 3c00274e3f refac to plaintext / remove xml 2025-05-26 17:51:34 -04:00
Taylor Wilsdon 6ae0dd2dee Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feature/gmail-search-xml-links 2025-05-26 17:36:55 -04:00
Taylor Wilsdon a842c75691 Update README.md 2025-05-26 17:34:12 -04:00
Taylor Wilsdon e377f03c62 Merge pull request #33 from taylorwilsdon/taylorwilsdon-patch-9
Update README.md
2025-05-26 17:33:24 -04:00
Taylor Wilsdon 6870febb9a Update README.md 2025-05-26 17:33:11 -04:00
Taylor Wilsdon 9f9caa5280 Update README.md 2025-05-26 17:31:18 -04:00
Taylor Wilsdon a1df161881 Update README.md 2025-05-26 17:28:01 -04:00
Taylor Wilsdon 29c95ad8f6 Update README.md 2025-05-26 17:27:23 -04:00
Taylor Wilsdon 8d21edb39e Update README.md 2025-05-26 17:25:40 -04:00
Taylor Wilsdon 3757ec818d Update README.md 2025-05-26 08:45:06 -04:00
Taylor Wilsdon 1fe7486b8b Update README.md 2025-05-26 06:39:04 -04:00
Taylor Wilsdon a56ff72e05 Update README.md 2025-05-25 10:09:46 -04:00
Taylor Wilsdon 8d55a27029 Update README.md 2025-05-25 07:41:41 -04:00
Marius Wilsch 754a8ed9af feat: enhance Gmail search with XML structure and web interface links
- Add _generate_gmail_web_url() helper function using #all for universal Gmail access
- Update search_gmail_messages to return XML-structured output with index attributes
- Include clickable Gmail web interface URLs for both messages and threads
- Maintain backward compatibility with existing Message/Thread ID usage
- Improve manual verification capabilities for users when multiple threads have same subject
2025-05-25 17:35:58 +08:00
Taylor Wilsdon d871574bbc Update README.md 2025-05-24 19:19:38 -04:00
Taylor Wilsdon e654a5a873 Merge pull request #30 from taylorwilsdon/taylorwilsdon-patch-8
Update README.md
2025-05-24 16:13:23 -04:00
Taylor Wilsdon 4c5251f01e Update README.md 2025-05-24 16:13:03 -04:00
Taylor Wilsdon ab1ffd092d Merge pull request #29 from taylorwilsdon/add_office_support
feat: Add support for Microsoft Office files in Google Docs & Drive files
2025-05-24 14:50:26 -04:00
Taylor Wilsdon b9b4f02449 update fallback message for binary 2025-05-24 14:49:32 -04:00
Taylor Wilsdon 99d8e2da4e add sharedstrings support; 2025-05-24 14:21:42 -04:00
Taylor Wilsdon 8acf59f457 add logging for utils 2025-05-24 14:00:20 -04:00
Taylor Wilsdon 051c7a43b3 add microsoft office file handling for google docs urls 2025-05-24 13:58:38 -04:00
Taylor Wilsdon 84b9078659 add utils for office xml text handling 2025-05-24 13:55:00 -04:00
Taylor Wilsdon f4e6275c19 add support for microsoft file unpacking with native toolset 2025-05-24 13:49:04 -04:00
Taylor Wilsdon e32beff43b Merge pull request #28 from taylorwilsdon/centralize_auth_helper
enh: Refactor authentication to deduplicate redundant logic
2025-05-24 11:54:54 -04:00
Taylor Wilsdon e94d0cf61f fix 2025-05-24 11:54:31 -04:00
Taylor Wilsdon 9e4add5ac2 refactor authentication to dedupe 2025-05-24 10:43:55 -04:00
Taylor Wilsdon ceaa019c93 Merge pull request #27 from MariusWilsch/gmail-thread-support
feat: Add Gmail thread support and fix message ID vs thread ID confusion
2025-05-24 10:01:20 -04:00
Taylor Wilsdon 0f36119e6e refac 2025-05-23 16:16:30 -04:00
Taylor Wilsdon 3f426bb22d clean up markdown 2025-05-23 16:08:34 -04:00
Marius Wilsch be2efe6826 feat: Add Gmail thread support and fix message ID vs thread ID confusion
- Add get_gmail_thread_content() function to retrieve complete conversation threads
- Enhance search_gmail_messages() to display both Message ID and Thread ID clearly
- Add helper function _extract_message_body() for consistent message parsing
- Fix 404 errors caused by using message IDs with thread functions
- Include usage guidance to prevent confusion between message and thread operations
- Add comprehensive documentation for both features

Resolves issue where users couldn't distinguish between message IDs and thread IDs,
leading to API errors when trying to retrieve thread content.
2025-05-24 00:08:19 +08:00
Taylor Wilsdon 802fbbf899 Merge pull request #26 from taylorwilsdon/single_user_mode
feat: Single User Mode -> trusted environment to bypass session requirements
2025-05-23 11:33:23 -04:00
Taylor Wilsdon c6110841ca update readme for single user 2025-05-23 11:31:22 -04:00
Taylor Wilsdon d7c37b107e implement single user mode 2025-05-23 11:22:45 -04:00
Taylor Wilsdon 558d61fc9e implement single user mode 2025-05-23 11:22:23 -04:00
Taylor Wilsdon 0a353a5bbc Merge pull request #25 from taylorwilsdon/readme
readme
2025-05-22 22:01:33 -04:00
Taylor Wilsdon 78c342348f update readme 2025-05-22 21:44:18 -04:00
Taylor Wilsdon f7b8451ed6 Merge pull request #23 from taylorwilsdon/mcp_session_enh
feat: Implement MCP Session Management
2025-05-22 21:25:29 -04:00
Taylor Wilsdon 2a93dca1a4 implement thread-safe session manager instance 2025-05-22 19:54:10 -04:00
Taylor Wilsdon 2eeb112baa update auth msg 2025-05-22 17:27:00 -04:00
Taylor Wilsdon f3b25bb307 fix oauth2callback 2025-05-22 17:26:33 -04:00
Taylor Wilsdon ab029b2b72 fully working mcp session id handling 2025-05-22 17:02:00 -04:00
Taylor Wilsdon 07930d6004 Merge pull request #21 from Vasu014/feature/gmail-draft-message
Add draft_gmail_message MCP tool
2025-05-22 14:57:56 -04:00
Taylor Wilsdon c2428cf268 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into feature/gmail-draft-message 2025-05-22 14:51:12 -04:00
Taylor Wilsdon 2a9083ede7 refac auth, formatting 2025-05-22 14:21:52 -04:00
Taylor Wilsdon 26574b61f8 Merge pull request #22 from taylorwilsdon/auth_refac
feat: Centralize and Refactor Google Authentication
2025-05-22 13:37:46 -04:00
Taylor Wilsdon dd316faa8c Update core/server.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-22 13:37:37 -04:00
Taylor Wilsdon c395b68899 auth refac, mcp-session-id still flakey 2025-05-22 13:33:06 -04:00
Vasu Bhardwaj b3c2d2e149 Add draft_gmail_message MCP tool
Add new tool to create Gmail draft messages with optional recipients.
This allows users to save email drafts at any stage of composition
without requiring all fields to be completed.

- Implements Gmail draft API integration
- Makes "to" field optional for flexibility
- Uses GMAIL_COMPOSE_SCOPE for authentication
- Maintains existing project patterns for error handling and logging
2025-05-22 00:02:51 +05:30
Taylor Wilsdon 4c2bde02ff Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into auth_refac 2025-05-21 13:04:00 -04:00
Taylor Wilsdon 53f96de0e8 Delete .github/workflows directory 2025-05-20 22:39:42 -04:00
Taylor Wilsdon d096a2450e fix imports 2025-05-20 14:54:56 -04:00
Taylor Wilsdon cac5c1292e refactor auth into centralized flow, invoke in uniform manner 2025-05-20 14:51:10 -04:00
Taylor Wilsdon 0ad54f4cb4 Create python-package.yml 2025-05-20 13:32:59 -04:00
Taylor Wilsdon 843d4c362f Update README.md
update tool defs
2025-05-20 13:23:08 -04:00
Taylor Wilsdon 54329db234 Merge pull request #19 from taylorwilsdon/valdez/add-gmail-send-ability
feat: add Gmail message sending functionality with MIMEText support #18
2025-05-20 11:00:44 -04:00
Taylor Wilsdon f68ccab2cc Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into valdez/add-gmail-send-ability 2025-05-20 11:00:08 -04:00
Taylor Wilsdon 63ad3f1281 Merge pull request #18 from valdezm/valdez/add-gmail-send-ability
feat: add Gmail message sending functionality with MIMEText support
2025-05-20 11:00:02 -04:00
Taylor Wilsdon 821bb21600 revert from field 2025-05-20 10:59:04 -04:00
Taylor Wilsdon 8abacb2cc1 add from header, clean up messy gemini refac comments 2025-05-20 10:43:47 -04:00
Mark Valdez 6844818fe1 feat: add Gmail message sending functionality with MIMEText support 2025-05-19 20:57:11 -07:00
Taylor Wilsdon e9deca70ce working stub with updated uv 2025-05-17 17:27:06 -04:00
Taylor Wilsdon b80e96d193 fix dockerfile 2025-05-17 16:41:25 -04:00
Taylor Wilsdon 327316e554 update smithery config 2025-05-17 15:42:20 -04:00
Taylor Wilsdon 59f7093b9d update smithery file 2025-05-17 15:39:42 -04:00
Taylor Wilsdon 3cf284929e implement date handling autoformat better 2025-05-17 15:33:09 -04:00
Taylor Wilsdon 9f0b39b414 Update README.md 2025-05-17 15:32:46 -04:00
Taylor Wilsdon da99bfe1d1 update readme 2025-05-17 13:28:35 -04:00
Taylor Wilsdon 09f8fb9909 Merge pull request #17 from taylorwilsdon/taylorwilsdon-patch-7
Update README.md
2025-05-17 13:20:48 -04:00
Taylor Wilsdon 9f14fe3407 Update README.md 2025-05-17 13:20:40 -04:00
Taylor Wilsdon 10fff4d358 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp 2025-05-17 13:18:48 -04:00
Taylor Wilsdon ff296edcc9 update dockerfile 2025-05-17 13:18:46 -04:00
Taylor Wilsdon d1b5b1c629 Merge pull request #16 from taylorwilsdon/taylorwilsdon-patch-6
Update README.md
2025-05-17 13:15:14 -04:00
Taylor Wilsdon 9834d6b45e Update README.md 2025-05-17 13:15:05 -04:00
Taylor Wilsdon 6d21a84321 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into refac_cal_auth 2025-05-17 10:45:03 -04:00
Taylor Wilsdon f6d30f0cfb Add pre-deletion validation call 2025-05-17 10:45:00 -04:00
Taylor Wilsdon 8772a2f612 Merge pull request #15 from taylorwilsdon/refac_cal_auth
fix: helper function for auth, fix indent
2025-05-17 10:28:44 -04:00
Taylor Wilsdon a52d7d1b10 helper function for auth, fix indent 2025-05-17 10:25:55 -04:00
Taylor Wilsdon 03e413a33d Merge pull request #14 from taylorwilsdon/calendar_modify_delete
feat: Google Calendar Modify + Delete actions
2025-05-17 10:22:09 -04:00
Taylor Wilsdon 471ceedc46 add modify and delete options 2025-05-17 10:21:14 -04:00
Taylor Wilsdon 9052842bfc Merge pull request #13 from taylorwilsdon/taylorwilsdon-patch-5
Update calendar_tools.py
2025-05-17 10:13:31 -04:00
Taylor Wilsdon 2be9527e35 Update calendar_tools.py 2025-05-17 10:13:16 -04:00
Taylor Wilsdon 1dc90da395 python 3.11 support 2025-05-15 11:10:37 -04:00
Taylor Wilsdon 1942ebf119 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp 2025-05-15 11:10:06 -04:00
Taylor Wilsdon 7f8a91f948 python 3.11 support 2025-05-15 11:09:53 -04:00
Taylor Wilsdon bd3356a541 Update README.md 2025-05-15 09:13:23 -04:00
Taylor Wilsdon a20a8b06b7 Update README.md 2025-05-15 09:11:17 -04:00
Taylor Wilsdon 17272f575a Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp 2025-05-15 09:10:23 -04:00
Taylor Wilsdon f740bd794c implement support for env var declared base uri & port 2025-05-15 09:10:06 -04:00
Taylor Wilsdon 5291521b6e Merge pull request #11 from taylorwilsdon/taylorwilsdon-patch-4 2025-05-15 07:29:10 -04:00
Taylor Wilsdon bbaf19b190 Update README.md 2025-05-15 07:28:53 -04:00
Taylor Wilsdon bcc1d70b1e Update README.md 2025-05-15 07:26:06 -04:00
Taylor Wilsdon aa2a59caea rm old auth 2025-05-14 14:26:47 -04:00
Taylor Wilsdon ce78b71c94 prep for smithery deployment 2025-05-14 10:46:01 -04:00
Taylor Wilsdon 48172f1eb4 Merge pull request #10 from taylorwilsdon/taylorwilsdon-patch-3
Update README.md
2025-05-14 09:48:58 -04:00
Taylor Wilsdon dc92dae297 Update README.md 2025-05-14 09:48:49 -04:00
Taylor Wilsdon 4b9c24317b Merge pull request #9 from taylorwilsdon/google_docs
feat: Google Docs support
2025-05-14 09:47:50 -04:00
Taylor Wilsdon 95aef744a7 update readme 2025-05-14 09:47:12 -04:00
Taylor Wilsdon 04e526c0d5 Implement support for Google docs, including retrieve by url 2025-05-14 09:44:45 -04:00
Taylor Wilsdon 13eb429d67 rebase readme 2025-05-14 09:36:42 -04:00
Taylor Wilsdon 66d81a9a8a add google docs 2025-05-14 09:35:48 -04:00
Taylor Wilsdon b4886d28bf Merge pull request #8 from taylorwilsdon/taylorwilsdon-patch-2
Update README.md
2025-05-14 08:22:22 -04:00
Taylor Wilsdon 2dd7e84c61 Update README.md 2025-05-14 08:22:14 -04:00
Taylor Wilsdon f1f7880052 Merge pull request #7 from taylorwilsdon/taylorwilsdon-patch-1
Update README.md
2025-05-14 08:21:50 -04:00
Taylor Wilsdon 9a883ab799 Update README.md 2025-05-14 08:21:40 -04:00
Taylor Wilsdon 5285fa8c7a Merge pull request #6 from taylorwilsdon/fix
refac: oauth / authentication
2025-05-13 19:20:32 -04:00
Taylor Wilsdon 833b23b019 add google config 2025-05-13 12:49:35 -04:00
Taylor Wilsdon c8820b9482 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into add_drive_and_gmail 2025-05-13 12:45:31 -04:00
Taylor Wilsdon bd047d9f9a auth cleanup 2025-05-13 12:45:24 -04:00
Taylor Wilsdon 0bebaee051 unify authentication logic 2025-05-13 12:36:53 -04:00
Taylor Wilsdon ae2361f1b8 Merge pull request #5 from taylorwilsdon/add_drive_and_gmail
feat: Add Support for Google Drive and Gmail Operations
2025-05-12 18:16:20 -04:00
Taylor Wilsdon 4e13196802 refac: readme 2025-05-12 17:40:18 -04:00
Taylor Wilsdon bece707553 Fix drive query structure and escaping 2025-05-12 17:32:38 -04:00
Taylor Wilsdon dda55404ab add gmail tool 2025-05-12 17:22:58 -04:00
Taylor Wilsdon e6fc66bc18 add Gmail & drive, both working 2025-05-12 14:32:44 -04:00
Taylor Wilsdon afd9df9ca6 Merge branch 'main' of github.com:taylorwilsdon/google_workspace_mcp into add_google_drive 2025-05-12 13:53:17 -04:00
Taylor Wilsdon 7096963f2b Add Google Drive functionality 2025-05-12 13:52:53 -04:00
Taylor Wilsdon 0912a94382 Merge pull request #4 from taylorwilsdon/mcp_v2_enh_refac
enh: Modernize MCP Server with Streamable HTTP, FastAPI Integration, and Enhanced OAuth Flow
2025-05-12 13:52:18 -04:00
Taylor Wilsdon bdf44c46fe happy native & simulated via mcpo 2025-05-11 17:39:15 -04:00
Taylor Wilsdon 26954f1f5b refactor response payloads and description texts to work better with native tool calling 2025-05-11 17:15:05 -04:00
Taylor Wilsdon e681d265bf working build for all functionality on streamablehttp with auth_session_id 2025-05-11 15:37:44 -04:00
Taylor Wilsdon 984d4065ff restore uv.lock 2025-05-11 10:08:00 -04:00
Taylor Wilsdon 6e94512ca3 convert to streamable http 2025-05-11 10:07:37 -04:00
Taylor Wilsdon e8c05af5d8 remove stupid icon 2025-05-10 18:50:01 -04:00
Taylor Wilsdon cf4fc9fa34 improve auth callback trigger logic 2025-05-10 18:47:24 -04:00
Taylor Wilsdon 458a1476b0 Google Workspace MCP Response Format Improvements - model-agnostic json envelope format for better compatibility across platforms 2025-05-10 17:57:25 -04:00
Taylor Wilsdon de498150ab update readme.md 2025-05-10 15:29:53 -04:00
Taylor Wilsdon feb9984bb2 Merge pull request #2 from taylorwilsdon/refac_oauth
enh: Refactor authentication flow to simplify, implement file based logging
2025-05-10 15:26:58 -04:00
Taylor Wilsdon 55c7723bbe final cleanup 2025-05-10 15:18:19 -04:00
Taylor Wilsdon e83bdf0e67 cleanup 2025-05-10 15:11:13 -04:00
Taylor Wilsdon db9452f3ad refactor oauth flow to simplify and leverage google built in resources 2025-05-06 12:17:22 -04:00
Taylor Wilsdon cc54fc1b8f Merge pull request #1 from taylorwilsdon/its_advanced_but_sucks
enh: OAuth Handling & Tool Registry
2025-05-06 10:19:17 -04:00
Taylor Wilsdon a8e890f1a7 Update core/server.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-06 10:16:09 -04:00
Taylor Wilsdon 190d8881fd Update gcalendar/calendar_tools.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-06 10:15:59 -04:00
Taylor Wilsdon face6bcbce hey it works great now 2025-05-06 09:36:48 -04:00
Taylor Wilsdon a7659d087c stage shitty branch 2025-04-27 16:59:35 -04:00
Taylor Wilsdon 43ef646aa4 working non loop server but staged earlier than before 2025-04-27 15:33:48 -04:00
Taylor Wilsdon d0978cb2f6 chore: add .gitignore; purge build artefacts 2025-04-27 14:48:46 -04:00
Taylor Wilsdon 82f5cefb5b feat: initial clean commit without build artefacts 2025-04-27 14:44:23 -04:00
Taylor Wilsdon 828dbfae08 implement guided auth flow for both chat based and server callback flows 2025-04-27 14:37:08 -04:00
Taylor Wilsdon 65048b7f46 implement guided auth flow for both chat based and server callback flows 2025-04-27 14:30:11 -04:00
Taylor Wilsdon ca86d591d4 initial scaffolding 2025-04-27 12:34:22 -04:00
3 changed files with 108 additions and 4 deletions
View File
@@ -0,0 +1,104 @@
You are an expert Python engineer with a specific expertise around FastMCP-based Python Model Context Protocol (MCP) servers.
# 📄 Project Context
This repository (`google_workspace_mcp`) is a productiongrade FastMCP server that exposes Google Workspacetooling (Gmail, Calendar, Drive, Docs, Sheets, Slides, Chat, Tasks, Forms, Contacts, Search) to LLM clients.
Key architectural pillars:
* **FastMCP 3.x** for server/runtime, tool registration, validation and transports.
* **Async Google client libraries** with OAuth2.1 desktopflow and multiuser token caching.
* Strict typing & *pydanticv2* models for request/response schemas.
* Highconcurrency, stateless worker model (FastAPI/Starlette under the hood).
* Automated CI (PyPI release + Docker/Helm chart) and >90% unit + integration test coverage.
# 🎯 Review Goals & Priorities
1. **Correctness & Protocol Compliance**
* Ensure new/modified tools conform to the MCP JSONSchema generated by FastMCP (@mcp.tool).
* Validate that their signatures remain LLMfriendly (primitive or Pydantic types only).
* Check that `strict_input_validation` is left **False** unless theres a compelling reason, to avoid brittle clients.
2. **Security & Privacy**
* No secrets, refresh tokens or PII logged or leaked in exceptions or event streams.
* All outbound Google API calls must respect enduser OAuth scopes *least privilege*.
* Ratelimit & quota errors should be caught and surfaced as MCP `ToolExecutionError`.
3. **Robustness & Performance**
* Prefer `asyncio` Google APIs (via `google-apis-async`) or run blocking calls inside `run_in_executor`.
* Avoid longrunning operations (>30s) inside request context instruct to stream partial results or schedule background tasks.
* Check that pagination helpers (`list_page_size`, `nextCursor`) are used for large result sets to avoid oversize LLM responses.
4. **API Design & UX**
* Tool names: imperative, camelCase, ≤3 words.
* Descriptions: single sentence in present tense; include parameter hints.
* Response payloads: concise, redact verbose HTML/email bodies by default; offer links or IDs to fetch full content.
* Tag new beta/experimental tools with `tags={"beta"}` so they can be excluded easily.
5. **Google Workspace Best Practices**
* Batch API requests where possible (`gmail.users().messages().batchModify`, `sheets.batchUpdate`).
* Use incremental Sync tokens to avoid refetching full collections.
* Respect user locale/timezone when constructing dates.
6. **Testing & CI**
* Unit tests for every tool; integration tests for highrisk flows (email send, file upload).
* Mock Google APIs with `httpretty` + canned fixtures do **not** hit live services in CI.
* Contract tests: regenerate FastMCP OpenAIschema and diff against committed goldens.
# 🚦 LowValue Feedback to Skip
* Pure formatting issues already covered by **Black+Ruff** precommit.
* Renaming variables for subjective style only.
* Suggesting synchronous alternatives when async is intentional.
* Requesting additional comments for trivial getters/setters.
# 🧭 Review Structure Template
<details>
<summary>Sample highimpact review comment</summary>
```markdown
### ✅ _gmail.sendMessage_ Input schema issue
`reply_to` parameter is optional in code but **required** in docstring/schema.
FastMCP coerces `"None"` strings to `None`, but with `strict_input_validation=False` a client could still pass an empty string which causes Google API 400.
* [ ] Set `reply_to: str | None = None` and document.
* [ ] Add unit test: sending email without `reply_to` succeeds.
_Why it matters_: prevents uservisible 400 errors and keeps schema truthful.
```
</details>
# 📑 Files & Folders To Ignore
| Path/Pattern | Reason |
| ------------------------------------- | ---------------------------------------- |
| `*.dxt`, `glama.json`, `fastmcp.json` | Deployment descriptors |
| `helm-chart/**`, `Dockerfile` | Infra packaging reviewed separately |
| `tests/fixtures/**` | Static fixtures only review if failing |
# 🔑 Style Guide (TL;DR)
* **PEP8** + Black (120col) + Ruff (see `pyproject.toml`).
* Mandatory **type hints** (mypy strict).
* Use **fstrings**, avoid `%` formatting.
* Prefer `async`/`await`; limit `time.sleep`.
* One public class/function per file unless tightly coupled.
# 🙏 Tone Expectations for Copilot
Be concise, actionable, and prioritize **developer experience**.
Highlight *why* an issue matters (DX, security, correctness) before *how* to fix.
Cap recommendations at **35 per file** to prevent noise. Do not feel compelled to come up with 3. Only present HIGH VALUE recommendations.
Use codefenced suggestions where helpful.
---
*End of .instructions.md*
+4 -4
View File
@@ -49,10 +49,10 @@ email = "taylor@taylorwilsdon.com"
[project.urls] [project.urls]
Homepage = "https://workspacemcp.com" Homepage = "https://workspacemcp.com"
Repository = "https://git.alwisp.com/jason/google-mcp.git" Repository = "https://github.com/taylorwilsdon/google_workspace_mcp"
Documentation = "https://git.alwisp.com/jason/google-mcp#readme" Documentation = "https://github.com/taylorwilsdon/google_workspace_mcp#readme"
Issues = "https://git.alwisp.com/jason/google-mcp/issues" Issues = "https://github.com/taylorwilsdon/google_workspace_mcp/issues"
Changelog = "https://git.alwisp.com/jason/google-mcp/releases" Changelog = "https://github.com/taylorwilsdon/google_workspace_mcp/releases"
[project.scripts] [project.scripts]
workspace-mcp = "main:main" workspace-mcp = "main:main"