265 Commits

Author SHA1 Message Date
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
b6ead2e23c pr feedback 2026-02-08 16:09:37 -05:00
Taylor Wilsdon
771de29288 fixes 2026-02-07 14:18:10 -05: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
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
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
57e1d41c55 refac into single component 2026-02-01 14:47:32 -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
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
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
Taylor Wilsdon
eca3444777 merge upstream 2026-01-31 13:14:27 -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
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
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
d74d31ced7 ruff 2026-01-28 13:07:03 -05:00
Taylor Wilsdon
ca627c857f fix for fastmcp v2.14.4 2026-01-28 12:55:27 -05: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
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
Taylor Wilsdon
8c007e2a9b Update core/tool_tiers.yaml 2026-01-27 19:31:58 -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
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
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
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
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
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
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
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
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
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
Taylor Wilsdon
a66fd8b71e add to tool tiers 2026-01-07 12:08:39 -05: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
517d0876a1 fix valkey optional dep 2025-12-28 12:52:40 -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