Skip to main content
Glama

Google Workspace MCP Server

Сервер Google Workspace MCP

Подключите клиентов MCP, помощников AI и многое другое к сервисам Google Workspace через протокол контекста модели

Посмотрите на это в действии:


📑 Содержание


🌐 Обзор

Google Workspace MCP Server интегрирует службы Google Workspace (Календарь, Диск, Gmail и Документы) с помощниками ИИ и другими приложениями с помощью Model Context Protocol (MCP). Это позволяет системам ИИ получать доступ и взаимодействовать с пользовательскими данными из приложений Google Workspace безопасно и эффективно.


✨ Особенности

  • 🔐 Аутентификация OAuth 2.0 : безопасное подключение к API Google с использованием авторизованных пользователем учетных данных с автоматическим обновлением токенов и централизованным потоком аутентификации.
  • 📅 Интеграция с Google Calendar : полное управление календарем — список календарей, выбор событий, создание/изменение/удаление событий с поддержкой событий на весь день и событий с заданным временем
  • 📁 Интеграция с Google Drive : поиск файлов, просмотр содержимого папок, чтение содержимого файлов и создание новых файлов. Поддержка извлечения и восстановления .docx, .xlsx и других форматов Microsoft Office нативно!
  • 📧 Интеграция с Gmail : полное управление электронной почтой — поиск сообщений, извлечение контента, отправка писем и создание черновиков с полной поддержкой всех синтаксисов запросов
  • 📄 Интеграция с Google Docs : ищите документы, читайте их содержимое, создавайте списки документов в папках и создавайте новые документы прямо из чата!
  • 🔄 Несколько вариантов транспортировки : потоковая передача HTTP + резервный SSE
  • 🔌 Совместимость mcpo : легкое предоставление сервера в качестве конечной точки OpenAPI для интеграции с такими инструментами, как Open WebUI.
  • 🧩 Расширяемый дизайн : простая структура для добавления поддержки большего количества API и инструментов Google Workspace
  • 🔄 Интегрированный обратный вызов OAuth : обрабатывает перенаправление OAuth непосредственно на сервере на порту 8000
  • ⚡ Потокобезопасное управление сеансами : надежная обработка сеансов с потокобезопасной архитектурой для повышения надежности

🚀 Быстрый старт

Предпосылки

  • Питон 3.11+
  • Установщик пакета uv (или pip)
  • Проект Google Cloud с включенными учетными данными OAuth 2.0 для требуемых API (Календарь, Диск, Gmail, Документы)

Установка

# Clone the repository (replace with your fork URL if different) git clone https://github.com/taylorwilsdon/google_workspace_mcp.git cd google_workspace_mcp # Create a virtual environment and install dependencies uv venv source .venv/bin/activate # On Windows use `.venv\Scripts\activate` uv pip install -e .

Конфигурация

  1. Создайте учетные данные OAuth 2.0 (тип приложения для настольного компьютера) в Google Cloud Console .
  2. Включите API Google Calendar , API Google Drive , API Gmail и API Google Docs для своего проекта.
  3. Загрузите учетные данные клиента OAuth как client_secret.json и поместите его в корневой каталог проекта.
  4. Добавьте следующий URI перенаправления в конфигурацию клиента OAuth в Google Cloud Console. Обратите внимание, что http://localhost:8000 — это базовый URI и порт по умолчанию, которые можно настроить с помощью переменных среды ( WORKSPACE_MCP_BASE_URI и WORKSPACE_MCP_PORT ). Если вы измените их, вам необходимо обновить URI перенаправления в Google Cloud Console соответствующим образом.
    http://localhost:8000/oauth2callback
  5. ⚠️ Важно : убедитесь, что client_secret.json добавлен в ваш файл .gitignore и никогда не передается в систему контроля версий.

Конфигурация сервера

Базовый URL-адрес и порт сервера можно настроить с помощью переменных среды:

  • WORKSPACE_MCP_BASE_URI : Устанавливает базовый URI для сервера (по умолчанию: http://localhost ). Это влияет на server_url , используемый для вызова собственных функций Gemini, и OAUTH_REDIRECT_URI .
  • WORKSPACE_MCP_PORT : Устанавливает порт, который прослушивает сервер (по умолчанию: 8000 ). Это влияет на server_url , port и OAUTH_REDIRECT_URI .

Пример использования:

export WORKSPACE_MCP_BASE_URI="https://my-custom-domain.com" export WORKSPACE_MCP_PORT="9000" uv run main.py

Настройка среды

Сервер использует HTTP для обратных вызовов OAuth localhost во время разработки. Установите эту переменную среды перед запуском сервера:

# Allow HTTP for localhost OAuth callbacks (development only!) export OAUTHLIB_INSECURE_TRANSPORT=1

Без этого вы можете столкнуться с ошибкой «OAuth 2 MUST use HTTPS» во время процесса аутентификации.

Запустить сервер

Выберите один из следующих способов запуска сервера:

python main.py # or using uv uv run main.py

Запускает сервер с транспортным уровнем HTTP на порту 8000.

Многопользовательский MCP — это своего рода беспорядок, поэтому сейчас все работает лучше всего как сопоставление 1:1 между клиентом и сервером. Это изменится, как только Клод сможет выполнять потоки OAuth 2.1, поэтому этот MCP был создан с флагом для упрощенных однопользовательских сред. Вы можете запустить сервер в однопользовательском режиме, который обходит сопоставление сеанса с OAuth и использует любые доступные учетные данные из каталога .credentials :

python main.py --single-user # or using uv uv run main.py --single-user

В однопользовательском режиме:

  • Сервер автоматически находит и использует любые действительные учетные данные в каталоге .credentials
  • Сопоставление сеансов не требуется — сервер использует первый найденный действительный файл учетных данных.
  • Полезно для разработки, тестирования или однопользовательских развертываний.
  • Для создания файлов учетных данных по-прежнему требуется первоначальная аутентификация OAuth

Этот режим особенно полезен, когда вам не требуется управление многопользовательскими сеансами и требуется упрощенная обработка учетных данных.

Вы можете создать и запустить сервер, используя предоставленный Dockerfile .

# Build the Docker image docker build -t google-workspace-mcp . # Run the Docker container # The -p flag maps the container port 8000 to the host port 8000 # The -v flag mounts the current directory to /app inside the container # This is useful for development to pick up code changes without rebuilding docker run -p 8000:8000 -v $(pwd):/app google-workspace-mcp

Файл smithery.yaml настроен для корректного запуска сервера в контейнере Docker.

Важные порты

Порты по умолчанию — 8000 , но их можно изменить с помощью переменной среды WORKSPACE_MCP_PORT .

УслугаПорт по умолчаниюОписание
Обратный вызов OAuth8000Обрабатывается внутри сервера через маршрут /oauth2callback
HTTP-сервер режима8000По умолчанию при использовании HTTP-транспорта

Подключение к серверу

Сервер поддерживает несколько способов подключения:

Клод Рабочий стол:

Может работать где угодно и использоваться через mcp-remote или вызываться локально либо с помощью uv run main.py в качестве аргумента, либо с помощью mcp-remote с localhost.

config.json:

{ "mcpServers": { "Google workspace": { "command": "npx", "args": [ "mcp-remote", "http://localhost:8000/mcp” ] } } }
  1. Установите mcpo : uv pip install mcpo или pip install mcpo
  2. Создайте config.json (см. Интеграция с Open WebUI )
  3. Запустите mcpo , указав на вашу конфигурацию: uvx mcpo --config config.json --port 8001
  4. API сервера MCP будет доступен по адресу: http://localhost:8001/google_workspace (или по имени, указанному в config.json )
  5. Документация OpenAPI (Swagger UI) доступна по адресу: http://localhost:8001/google_workspace/docs

С командой запуска (для использования mcpo с одним mcp):

  1. Установите mcpo : uv pip install mcpo или pip install mcpo
  2. Запустите с uvx mcpo --port 8001 --api-key "top-secret" --server-type "streamablehttp" -- http://localhost:8000/mcp
  3. API сервера MCP будет доступен по адресу: http://localhost:8001/openapi.json (или по имени, указанному в config.json )
  4. Документация OpenAPI (Swagger UI) доступна по адресу: http://localhost:8001/docs
  5. Запустите сервер в режиме HTTP (см. Запуск сервера )
  6. Отправляйте запросы MCP JSON напрямую на http://localhost:8000
  7. Полезно для тестирования с помощью таких инструментов, как curl или пользовательских HTTP-клиентов.
  8. Может использоваться для обслуживания Claude Desktop и других клиентов MCP, которые еще не интегрировали новый потоковый HTTP-транспорт через mcp-remote:
  9. При желании вы также можете работать в резервном режиме SSE.

Интеграция с Open WebUI

Чтобы использовать этот сервер в качестве поставщика инструментов в Open WebUI:

  1. Создайте конфигурацию mcpo : создайте файл с именем config.json со следующей структурой, чтобы mcpo сделал потоковую конечную точку HTTP доступной в качестве инструмента спецификации OpenAPI.
    { "mcpServers": { "google_workspace": { "type": "streamablehttp", "url": "http://localhost:8000/mcp" } } }
  2. Запустите сервер mcpo :
    mcpo --port 8001 --config config.json --api-key "your-optional-secret-key"
    Эта команда запускает прокси-сервер mcpo , обслуживающий ваш активный (предполагается, что порт 8000) Google Workspace MCP на порту 8001.
  3. Настройте Open WebUI :
    • Перейдите к настройкам Open WebUI.
    • Перейдите в «Подключения» -> «Инструменты»
    • Нажмите «Добавить инструмент».
    • Введите URL-адрес сервера: http://localhost:8001/google_workspace (соответствующий базовому URL-адресу mcpo и имени сервера из config.json )
    • Если вы использовали --api-key с mcpo , введите его в качестве API-ключа
    • Сохранить конфигурацию
    • Инструменты Google Workspace теперь должны быть доступны при взаимодействии с моделями в Open WebUI.

Первая аутентификация

При вызове инструмента, требующего доступа к API Google:

  • Если user_google_email предоставлен инструменту, а учетные данные отсутствуют/недействительны : сервер автоматически инициирует поток OAuth 2.0. URL-адрес авторизации будет возвращен в ответе MCP (или выведен на консоль).
  • Если user_google_email НЕ предоставлен и учетные данные отсутствуют/недействительны : инструмент вернет сообщение об ошибке, указывающее LLM использовать централизованный инструмент start_google_auth . Затем LLM должен вызвать start_google_auth с адресом электронной почты пользователя и соответствующим service_name (например, «Google Calendar», «Google Docs», «Gmail», «Google Drive»). Это также вернет URL авторизации.

Действия пользователя (после получения URL-адреса авторизации):

  1. Откройте предоставленный URL-адрес авторизации в веб-браузере.
  2. Войдите в учетную запись Google и предоставьте запрошенные разрешения для указанной службы.
  3. После авторизации Google перенаправит браузер на http://localhost:8000/oauth2callback (или на настроенный вами URI перенаправления).
  4. Сервер MCP обрабатывает этот обратный вызов, обменивает код авторизации на токены и надежно сохраняет учетные данные.
  5. Затем LLM может повторить исходный запрос. Последующие вызовы для того же пользователя и сервиса должны работать без повторной аутентификации до тех пор, пока не истечет срок действия маркера обновления или он не будет отозван.

🧰 Доступные инструменты

Примечание : Первое использование любого инструмента для определенной службы Google может запустить поток аутентификации OAuth, если действительные учетные данные еще не сохранены и user_google_email предоставлен инструменту. Если требуется аутентификация и user_google_email не предоставлен инструменту, LLM должен использовать централизованный инструмент start_google_auth (определенный в core/server.py ) с электронной почтой пользователя и соответствующим service_name .

📅 Google Календарь

Источник: gcalendar/calendar_tools.py

ИнструментОписаниеПараметры
start_google_auth(Централизовано в core/server.py ) Инициирует поток аутентификации OAuth 2.0 для определенной учетной записи и службы Google. Используйте это, когда нет действительных учетных данных или если инструмент не работает из-за отсутствия аутентификации и ему не был предоставлен адрес электронной почты.user_google_email (обязательно): адрес электронной почты пользователя Google. • service_name (обязательно): имя службы Google (например, «Google Calendar», «Google Docs», «Gmail», «Google Drive»).
list_calendarsПеречисляет все календари, доступные аутентифицированному пользователю.user_google_email (необязательно): используется, если сеанс не аутентифицирован • mcp_session_id (вводится автоматически)
get_eventsИзвлекает предстоящие события из указанного календаря в указанном диапазоне времени.calendar_id (необязательно): идентификатор календаря (по умолчанию: primary ) • time_min (необязательно): время начала (RFC3339 или YYYY-MM-DD ) • time_max (необязательно): время окончания (RFC3339 или YYYY-MM-DD ) • max_results (необязательно): максимальное количество событий (по умолчанию: 25) • user_google_email (необязательно) • mcp_session_id (вставляется автоматически)
create_eventСоздает новое событие календаря. Поддерживает события на весь день и события с заданным временем.summary (обязательно): Название события• start_time (обязательно): Время начала (RFC3339 или YYYY-MM-DD )• end_time (обязательно): Время окончания (RFC3339 или YYYY-MM-DD )• calendar_id (необязательно): Идентификатор календаря (по умолчанию: primary )• description , location , attendees , timezone (необязательно)• user_google_email (необязательно)• mcp_session_id (вставляется автоматически)
modify_eventОбновляет существующее событие по ID. Будут изменены только предоставленные поля.event_id (обязательно): идентификатор события для изменения • calendar_id (необязательно): идентификатор календаря (по умолчанию: primary ) • summary , start_time , end_time , description , location , attendees , timezone (необязательно) • user_google_email (необязательно) • mcp_session_id (вставляется автоматически)
delete_eventУдаляет событие по идентификатору.event_id (обязательно): идентификатор события для удаления • calendar_id (необязательно): идентификатор календаря (по умолчанию: primary ) • user_google_email (необязательно) • mcp_session_id (вставляется автоматически)

ℹ️ Все инструменты Календаря поддерживают аутентификацию через текущий сеанс MCP ( mcp_session_id ) или откат к user_google_email . Если ни один из них недоступен и требуется аутентификация, инструмент вернет ошибку, предлагающую LLM использовать централизованный инструмент start_google_auth с электронной почтой пользователя и service_name="Google Calendar" .

🕒 Параметры даты/времени: инструменты принимают как полные временные метки RFC3339 (например, 2024-05-12T10:00:00Z), так и простые даты (например, 2024-05-12). Сервер автоматически форматирует их по мере необходимости.

📁 Google Диск

Источник: gdrive/drive_tools.py

ИнструментОписаниеПараметры
search_drive_filesПоиск файлов и папок на Диске пользователя.query (обязательно): строка поискового запроса (например, name contains 'report' ) • max_results (необязательно): максимальное количество возвращаемых файлов
get_drive_file_contentИзвлекает содержимое определенного файлаfile_id (обязательно): идентификатор файла. • mime_type (необязательно): укажите желаемый формат экспорта.
list_drive_itemsВыводит список файлов и папок в определенной папке или корнеfolder_id (необязательно): идентификатор папки для отображения (по умолчанию — root) • max_results (необязательно): максимальное количество возвращаемых элементов
create_drive_fileСоздает новый файл на Google Дискеname (обязательно): желаемое имя для нового файла. • content (обязательно): текстовое содержимое для записи в файл. • folder_id (необязательно): идентификатор родительской папки. • mime_type (необязательно): тип MIME файла (по умолчанию text/plain ).

Синтаксис запроса : для поисковых запросов Google Диска см. Синтаксис поискового запроса Диска.

📧 Gmail

Источник: gmail/gmail_tools.py

ИнструментОписаниеПараметры
search_gmail_messagesПоиск сообщений электронной почты с использованием стандартных операторов поиска Gmail (от, тема и т. д.).query (обязательно): строка поиска (например, "from:foo subject:bar is:unread" ) • user_google_email (необязательно) • page_size (необязательно, по умолчанию: 10) • mcp_session_id (вставляется автоматически)
get_gmail_message_contentПолучите тему, отправителя и текст письма по идентификатору сообщения.message_id (обязательно)• user_google_email (необязательно)• mcp_session_id (вставляется автоматически)
send_gmail_messageОтправьте текстовое электронное письмо, используя учетную запись Gmail пользователя.to (обязательно): Адрес электронной почты получателя • subject (обязательно) • body (обязательно) • user_google_email (необязательно) • mcp_session_id (вставляется автоматически)
draft_gmail_messageСоздайте черновик электронного письма в аккаунте Gmail пользователя.subject (обязательно): Тема письма• body (обязательно): Тело письма (обычный текст)• to (необязательно): Адрес электронной почты получателя• user_google_email (необязательно)• mcp_session_id (вставляется автоматически)

Синтаксис запроса : для поисковых запросов Gmail см. Синтаксис поискового запроса Gmail

📝 Google Документы

Источник: gdocs/docs_tools.py

ИнструментОписаниеПараметры
search_docsПоиск Google Docs по названию (с использованием Drive API).query (обязательно): Текст для поиска в именах документов • user_google_email (необязательно) • page_size (необязательно, по умолчанию: 10) • mcp_session_id (вставляется автоматически)
get_doc_contentИзвлечение текстового содержимого документа Google по его идентификатору.document_id (обязательно)• user_google_email (необязательно)• mcp_session_id (вставляется автоматически)
list_docs_in_folderВывести список всех документов Google в указанной папке Диска (по идентификатору папки, по умолчанию = root ).folder_id (необязательно, по умолчанию: 'root' ) • user_google_email (необязательно) • page_size (необязательно, по умолчанию: 100) • mcp_session_id (вставляется автоматически)
create_docСоздайте новый документ Google, при желании с исходным содержимым.title (обязательно): Имя документа • content (необязательно, по умолчанию: пусто) • user_google_email (необязательно) • mcp_session_id (вставляется автоматически)

🛠️ Развитие

Структура проекта

google_workspace_mcp/ ├── .venv/ # Virtual environment (created by uv) ├── auth/ # OAuth handling logic (google_auth.py, oauth_manager.py) ├── core/ # Core MCP server logic (server.py) ├── gcalendar/ # Google Calendar tools (calendar_tools.py) ├── gdocs/ # Google Docs tools (docs_tools.py) ├── gdrive/ # Google Drive tools (drive_tools.py) ├── gmail/ # Gmail tools (gmail_tools.py) ├── .gitignore # Git ignore file ├── client_secret.json # Google OAuth Credentials (DO NOT COMMIT) ├── config.json # Example mcpo configuration ├── main.py # Main server entry point (imports tools) ├── mcp_server_debug.log # Log file for debugging ├── pyproject.toml # Project metadata and dependencies (for uv/pip) ├── README.md # This file ├── uv.lock # uv lock file

Обработка портов для OAuth

Сервер умело обрабатывает URI перенаправления OAuth 2.0 ( /oauth2callback ), не требуя отдельной структуры веб-сервера:

  • Он использует встроенные возможности HTTP-сервера базовой библиотеки MCP при работе в режиме HTTP или через mcpo
  • Пользовательский маршрут MCP зарегистрирован специально для /oauth2callback на порту 8000
  • Когда Google перенаправляет пользователя обратно после авторизации, сервер MCP перехватывает запрос по этому маршруту
  • Модуль auth извлекает код авторизации и завершает обмен токенами.
  • Для этого необходимо установить OAUTHLIB_INSECURE_TRANSPORT=1 при локальном запуске, поскольку обратный вызов использует http://localhost

Отладка

Проверьте mcp_server_debug.log на наличие подробных журналов, включая шаги аутентификации и вызовы API. При необходимости включите отладочное ведение журнала.

  • Проверьте правильность и наличие client_secret.json
  • Убедитесь, что в Google Cloud Console настроен правильный URI перенаправления ( http://localhost:8000/oauth2callback ).
  • Убедитесь, что необходимые API (Календарь, Диск, Gmail) включены в вашем проекте Google Cloud.
  • Проверьте, что в среде, где выполняется серверный процесс, установлен OAUTHLIB_INSECURE_TRANSPORT=1
  • Ищите конкретные сообщения об ошибках во время процесса OAuth на основе браузера.

Проверьте журналы сервера на наличие трассировок или сообщений об ошибках, возвращаемых API Google.

Добавление новых инструментов

  1. Выберите или создайте соответствующий модуль (например, gdocs/gdocs_tools.py )
  2. Импортировать необходимые библиотеки (клиентскую библиотеку Google API и т. д.)
  3. Определите async функцию для логики вашего инструмента. Используйте подсказки типов для параметров
  4. Украсьте функцию с помощью @server.tool("your_tool_name")
  5. Внутри функции получите аутентифицированные учетные данные:
from auth.google_auth import get_credentials, CONFIG_CLIENT_SECRETS_PATH # ... credentials = await asyncio.to_thread( get_credentials, user_google_email=your_user_email_variable, # Optional, can be None if session_id is primary required_scopes=YOUR_SPECIFIC_SCOPES_LIST, # e.g., [CALENDAR_READONLY_SCOPE] client_secrets_path=CONFIG_CLIENT_SECRETS_PATH, session_id=your_mcp_session_id_variable # Usually injected via Header ) if not credentials or not credentials.valid: # Handle missing/invalid credentials, possibly by calling start_auth_flow # from auth.google_auth (which is what service-specific start_auth tools do) pass
  1. Создайте клиент службы API Google: service = build('drive', 'v3', credentials=credentials)
  2. Реализовать логику вызова API Google
  3. Грамотно обрабатывайте потенциальные ошибки
  4. Возвращает результаты в виде словаря или списка, сериализуемого в формате JSON.
  5. Импортируйте функцию инструмента в main.py , чтобы она была зарегистрирована на сервере.
  6. Определите необходимые константы области действия, специфичные для сервиса, в модуле вашего инструмента.
  7. Обновите pyproject.toml если требуются новые зависимости.

Управление областью действия : глобальный список SCOPES в config/google_config.py используется для начального экрана согласия OAuth. Отдельные инструменты должны запрашивать минимальные required_scopes которые им нужны, при вызове get_credentials .


🔒 Заметки о безопасности

  • client_secret.json : Этот файл содержит конфиденциальные учетные данные. НИКОГДА не передавайте его в систему контроля версий. Убедитесь, что он указан в вашем файле .gitignore . Сохраните его в безопасности.
  • Токены пользователя : аутентифицированные учетные данные пользователя (токены обновления) хранятся локально в файлах типа credentials-<user_id_hash>.json . Защитите эти файлы, поскольку они предоставляют доступ к данным учетной записи Google пользователя. Убедитесь, что они также находятся в .gitignore .
  • Безопасность обратного вызова OAuth : использование http://localhost для обратного вызова OAuth является стандартным для установленных приложений во время разработки, но требует OAUTHLIB_INSECURE_TRANSPORT=1 . Для производственных развертываний за пределами localhost вы ДОЛЖНЫ использовать HTTPS для URI обратного вызова и настроить его соответствующим образом в Google Cloud Console.
  • Безопасность mcpo : При использовании mcpo для предоставления доступа к серверу по сети учтите следующее:
    • Использование опции --api-key для базовой аутентификации
    • Запуск mcpo за обратным прокси-сервером (например, Nginx или Caddy) для обработки HTTPS-терминации, надлежащего ведения журнала и более надежной аутентификации.
    • Привязка mcpo только к доверенным сетевым интерфейсам, если он доступен за пределами localhost
  • Управление областью действия : сервер запрашивает определенные области действия OAuth (разрешения) для Календаря, Диска и Gmail. Пользователи предоставляют доступ на основе этих областей действия во время первоначальной аутентификации. Не запрашивайте более широкие области действия, чем необходимо для реализованных инструментов.

Скриншоты:

📄 Лицензия

Данный проект лицензирован по лицензии MIT — подробности см. в файле LICENSE .

Related MCP Servers

View all related MCP servers

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/taylorwilsdon/google_workspace_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server