github Python re-analysis due

hawkxdev/google-workspace-mcp

github

Five isolated remote MCP servers for Gmail, Calendar, Drive, Sheets, and Docs

maintainer
hawkxdev
license
MIT
first seen
2026-09-03
last seen
2026-09-05
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 27 tools
transport stdio · streamable-http · http counts 27 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • calendar_get_event
  • calendar_get_freebusy
  • calendar_list_calendars
  • calendar_list_event_instances
  • calendar_search_events
  • drive_copy_file
  • drive_create_folder
  • drive_download_file
  • drive_get_file
  • drive_list_folder
  • drive_search_files
  • drive_upload_file
  • gmail_create_draft
  • gmail_delete_draft
  • gmail_get_draft
  • gmail_get_message
  • gmail_get_thread
  • gmail_list_drafts
  • gmail_list_labels
  • gmail_reply
  • gmail_search_messages
  • gmail_search_threads
  • gmail_send_draft
  • gmail_send_message
  • sheets_add_sheet
  • sheets_create_spreadsheet
  • sheets_update_range
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 32029ab · analyzer v33 · 2d ago

danger signals15

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 187

filesystem 51

  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/audit/logger.py :8 from pathlib import Path
  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/auth/state.py :19 from pathlib import Path
  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/cli/authorize.py :10 from pathlib import Path
  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/cli/cutover.py :14 from pathlib import Path
  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/cli/oauth_admin.py :9 from pathlib import Path
  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/common/config.py :7 from pathlib import Path
  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/common/managed_files.py :14 from pathlib import Path
  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/evals/apply.py :14 from pathlib import Path
  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/evals/cli.py :8 from pathlib import Path
  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/evals/models.py :9 from pathlib import Path
  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/google_auth/consent.py :11 from pathlib import Path
  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/google_auth/store.py :13 from pathlib import Path
  • fs hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/drive/client.py :7 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/common/test_managed_files.py :8 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/conftest.py :3 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_audit.py :7 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_audit_propagation.py :8 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_authorize_cli.py :9 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_bearer_oauth_only.py :7 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_cutover_cli.py :5 import shutil
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_factory_isolation.py :2 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_forwarded_host.py :4 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_google_auth.py :16 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_google_consent.py :8 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_hardening_regressions.py :9 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_mcp_path.py :3 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_oauth.py :11 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_oauth_admin.py :11 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_oauth_refresh.py :9 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_oauth_state.py :14 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_resource_canonicalization.py :8 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_resource_isolation.py :5 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_service_config.py :4 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_startup_validation.py :3 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_state_ownership.py :7 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/evals/conftest.py :7 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/evals/test_apply.py :9 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/evals/test_bindings.py :7 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/services/conftest.py :7 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/services/test_calendar_factory.py :5 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/services/test_docs_factory.py :5 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/services/test_drive_creates.py :9 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/services/test_drive_downloads.py :8 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/services/test_drive_factory.py :5 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/services/test_drive_mutations.py :8 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/services/test_gmail_tools.py :5 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/services/test_sheets_factory.py :5 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/smoke/test_cutover_ingress_script.py :5 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/smoke/test_deploy_assets.py :3 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/smoke/test_multi_service_smoke.py :2 from pathlib import Path
  • fs (weak) hawkxdev-google-workspace-mcp-32029ab/tests/smoke/test_public_pages.py :3 from pathlib import Path

shell / exec 3

  • shell hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/cli/cutover.py :11 import subprocess
  • shell (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_google_auth.py :10 import subprocess
  • shell (weak) hawkxdev-google-workspace-mcp-32029ab/tests/smoke/test_cutover_ingress_script.py :4 import subprocess

network 5

  • net hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/auth/bearer.py :8 from urllib.parse import unquote, urlsplit
  • net hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/auth/oauth.py :10 import urllib.parse
  • net hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/common/config.py :8 from urllib.parse import urlsplit
  • net hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/evals/apply.py :16 from urllib.parse import quote
  • net (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_oauth.py :9 import urllib.parse

database 13

  • db hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/auth/state.py :13 import sqlite3
  • db hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/cli/oauth_admin.py :7 import sqlite3
  • db (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_cutover_cli.py :6 import sqlite3
  • db (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_factory_isolation.py :1 import sqlite3
  • db (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_mcp_path.py :1 import sqlite3
  • db (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_oauth.py :8 import sqlite3
  • db (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_oauth_admin.py :9 import sqlite3
  • db (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_oauth_refresh.py :7 import sqlite3
  • db (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_oauth_state.py :9 import sqlite3
  • db (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_resource_isolation.py :3 import sqlite3
  • db (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_startup_validation.py :2 import sqlite3
  • db (weak) hawkxdev-google-workspace-mcp-32029ab/tests/core/test_state_ownership.py :3 import sqlite3
  • db (weak) hawkxdev-google-workspace-mcp-32029ab/tests/smoke/test_multi_service_smoke.py :1 import sqlite3

tool registrations 27

  • calendar_list_calendars hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/calendar/tools/read.py :43
  • calendar_search_events hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/calendar/tools/read.py :58
  • calendar_get_event hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/calendar/tools/read.py :89
  • calendar_list_event_instances hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/calendar/tools/read.py :104
  • calendar_get_freebusy hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/calendar/tools/read.py :137
  • drive_download_file hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/drive/tools/files.py :46
  • drive_create_folder hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/drive/tools/files.py :102
  • drive_upload_file hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/drive/tools/files.py :132
  • drive_copy_file hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/drive/tools/files.py :336
  • drive_search_files hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/drive/tools/read.py :37
  • drive_get_file hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/drive/tools/read.py :150
  • drive_list_folder hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/drive/tools/read.py :171
  • gmail_list_drafts hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/gmail/tools/drafts.py :36
  • gmail_get_draft hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/gmail/tools/drafts.py :57
  • gmail_create_draft hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/gmail/tools/drafts.py :78
  • gmail_delete_draft hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/gmail/tools/drafts.py :140
  • gmail_send_draft hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/gmail/tools/drafts.py :153
  • gmail_search_messages hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/gmail/tools/read.py :36
  • gmail_search_threads hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/gmail/tools/read.py :59
  • gmail_get_message hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/gmail/tools/read.py :82
  • gmail_get_thread hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/gmail/tools/read.py :96
  • gmail_list_labels hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/gmail/tools/read.py :110
  • gmail_send_message hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/gmail/tools/send.py :29
  • gmail_reply hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/gmail/tools/send.py :71
  • sheets_create_spreadsheet hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/sheets/tools/structure.py :44
  • sheets_add_sheet hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/sheets/tools/structure.py :87
  • sheets_update_range hawkxdev-google-workspace-mcp-32029ab/src/google_workspace_mcp/services/sheets/tools/values.py :54

declared dependencies 8

  • mcp@>=2,<3
  • starlette@>=1.6,<2
  • uvicorn@>=0.52,<0.53
  • google-auth@>=2.56,<3
  • google-auth-oauthlib@>=1.4,<2
  • google-api-python-client@>=2.198,<3
  • pydantic@>=2.12,<3
  • pydantic-settings@>=2.0,<3