Сервер Google Workspace MCP
Подключите клиентов MCP, помощников AI и многое другое к сервисам Google Workspace через протокол контекста модели
Посмотрите на это в действии:
📑 Содержание
Related MCP server: Azure MCP Server
🌐 Обзор
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
🔌 Совместимость : легкое предоставление сервера в качестве конечной точки OpenAPI для интеграции с такими инструментами, как Open WebUI.
🧩 Расширяемый дизайн : простая структура для добавления поддержки большего количества API и инструментов Google Workspace
🔄 Интегрированный обратный вызов OAuth : обрабатывает перенаправление OAuth непосредственно на сервере на порту 8000
⚡ Потокобезопасное управление сеансами : надежная обработка сеансов с потокобезопасной архитектурой для повышения надежности
🚀 Быстрый старт
Предпосылки
Питон 3.11+
Установщик пакета uv (или pip)
Проект Google Cloud с включенными учетными данными OAuth 2.0 для требуемых API (Календарь, Диск, Gmail, Документы)
Установка
Конфигурация
Создайте учетные данные OAuth 2.0 (тип приложения для настольного компьютера) в Google Cloud Console .
Включите API Google Calendar , API Google Drive , API Gmail и API Google Docs для своего проекта.
Загрузите учетные данные клиента OAuth как
client_secret.jsonи поместите его в корневой каталог проекта.Добавьте следующий URI перенаправления в конфигурацию клиента OAuth в Google Cloud Console. Обратите внимание, что
http://localhost:8000— это базовый URI и порт по умолчанию, которые можно настроить с помощью переменных среды (WORKSPACE_MCP_BASE_URIиWORKSPACE_MCP_PORT). Если вы измените их, вам необходимо обновить URI перенаправления в Google Cloud Console соответствующим образом.http://localhost:8000/oauth2callback⚠️ Важно : убедитесь, что
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.
Пример использования:
Настройка среды
Сервер использует HTTP для обратных вызовов OAuth localhost во время разработки. Установите эту переменную среды перед запуском сервера:
Без этого вы можете столкнуться с ошибкой «OAuth 2 MUST use HTTPS» во время процесса аутентификации.
Запустить сервер
Выберите один из следующих способов запуска сервера:
Запускает сервер с транспортным уровнем HTTP на порту 8000.
Многопользовательский MCP — это своего рода беспорядок, поэтому сейчас все работает лучше всего как сопоставление 1:1 между клиентом и сервером. Это изменится, как только Клод сможет выполнять потоки OAuth 2.1, поэтому этот MCP был создан с флагом для упрощенных однопользовательских сред. Вы можете запустить сервер в однопользовательском режиме, который обходит сопоставление сеанса с OAuth и использует любые доступные учетные данные из каталога .credentials :
В однопользовательском режиме:
Сервер автоматически находит и использует любые действительные учетные данные в каталоге
.credentialsСопоставление сеансов не требуется — сервер использует первый найденный действительный файл учетных данных.
Полезно для разработки, тестирования или однопользовательских развертываний.
Для создания файлов учетных данных по-прежнему требуется первоначальная аутентификация OAuth
Этот режим особенно полезен, когда вам не требуется управление многопользовательскими сеансами и требуется упрощенная обработка учетных данных.
Вы можете создать и запустить сервер, используя предоставленный Dockerfile .
Файл smithery.yaml настроен для корректного запуска сервера в контейнере Docker.
Важные порты
Порты по умолчанию — 8000 , но их можно изменить с помощью переменной среды WORKSPACE_MCP_PORT .
Услуга | Порт по умолчанию | Описание |
Обратный вызов OAuth |
| Обрабатывается внутри сервера через маршрут
|
HTTP-сервер режима |
| По умолчанию при использовании HTTP-транспорта |
Подключение к серверу
Сервер поддерживает несколько способов подключения:
Клод Рабочий стол:
Может работать где угодно и использоваться через
mcp-remoteили вызываться локально либо с помощьюuv run main.pyв качестве аргумента, либо с помощьюmcp-remoteс localhost.
config.json:
Установите
mcpo:uv pip install mcpoилиpip install mcpoСоздайте
config.json(см. Интеграция с Open WebUI )Запустите
mcpo, указав на вашу конфигурацию:uvx mcpo --config config.json --port 8001API сервера MCP будет доступен по адресу:
http://localhost:8001/google_workspace(или по имени, указанному вconfig.json)Документация OpenAPI (Swagger UI) доступна по адресу:
http://localhost:8001/google_workspace/docs
С командой запуска (для использования mcpo с одним mcp):
Установите
mcpo:uv pip install mcpoилиpip install mcpoЗапустите с
uvx mcpo --port 8001 --api-key "top-secret" --server-type "streamablehttp" -- http://localhost:8000/mcpAPI сервера MCP будет доступен по адресу:
http://localhost:8001/openapi.json(или по имени, указанному вconfig.json)Документация OpenAPI (Swagger UI) доступна по адресу:
http://localhost:8001/docsЗапустите сервер в режиме HTTP (см. Запуск сервера )
Отправляйте запросы MCP JSON напрямую на
http://localhost:8000Полезно для тестирования с помощью таких инструментов, как
curlили пользовательских HTTP-клиентов.Может использоваться для обслуживания Claude Desktop и других клиентов MCP, которые еще не интегрировали новый потоковый HTTP-транспорт через mcp-remote:
При желании вы также можете работать в резервном режиме SSE.
Интеграция с Open WebUI
Чтобы использовать этот сервер в качестве поставщика инструментов в Open WebUI:
Создайте конфигурацию : создайте файл с именем
config.jsonсо следующей структурой, чтобы mcpo сделал потоковую конечную точку HTTP доступной в качестве инструмента спецификации OpenAPI.{ "mcpServers": { "google_workspace": { "type": "streamablehttp", "url": "http://localhost:8000/mcp" } } }Запустите сервер :
mcpo --port 8001 --config config.json --api-key "your-optional-secret-key"Эта команда запускает прокси-сервер
mcpo, обслуживающий ваш активный (предполагается, что порт 8000) Google Workspace MCP на порту 8001.Настройте Open WebUI :
Перейдите к настройкам Open WebUI.
Перейдите в «Подключения» -> «Инструменты»
Нажмите «Добавить инструмент».
Введите URL-адрес сервера:
http://localhost:8001/google_workspace(соответствующий базовому URL-адресуmcpoи имени сервера изconfig.json)Если вы использовали
--api-keyсmcpo, введите его в качестве API-ключаСохранить конфигурацию
Инструменты Google Workspace теперь должны быть доступны при взаимодействии с моделями в Open WebUI.
Первая аутентификация
При вызове инструмента, требующего доступа к API Google:
Если : сервер автоматически инициирует поток OAuth 2.0. URL-адрес авторизации будет возвращен в ответе MCP (или выведен на консоль).
Если : инструмент вернет сообщение об ошибке, указывающее LLM использовать централизованный инструмент
start_google_auth. Затем LLM должен вызватьstart_google_authс адресом электронной почты пользователя и соответствующимservice_name(например, «Google Calendar», «Google Docs», «Gmail», «Google Drive»). Это также вернет URL авторизации.
Действия пользователя (после получения URL-адреса авторизации):
Откройте предоставленный URL-адрес авторизации в веб-браузере.
Войдите в учетную запись Google и предоставьте запрошенные разрешения для указанной службы.
После авторизации Google перенаправит браузер на
http://localhost:8000/oauth2callback(или на настроенный вами URI перенаправления).Сервер MCP обрабатывает этот обратный вызов, обменивает код авторизации на токены и надежно сохраняет учетные данные.
Затем LLM может повторить исходный запрос. Последующие вызовы для того же пользователя и сервиса должны работать без повторной аутентификации до тех пор, пока не истечет срок действия маркера обновления или он не будет отозван.
🧰 Доступные инструменты
Примечание : Первое использование любого инструмента для определенной службы Google может запустить поток аутентификации OAuth, если действительные учетные данные еще не сохранены и
user_google_emailпредоставлен инструменту. Если требуется аутентификация иuser_google_emailне предоставлен инструменту, LLM должен использовать централизованный инструментstart_google_auth(определенный вcore/server.py) с электронной почтой пользователя и соответствующимservice_name.
📅 Google Календарь
Источник: gcalendar/calendar_tools.py
Инструмент | Описание | Параметры |
| (Централизовано в
) Инициирует поток аутентификации OAuth 2.0 для определенной учетной записи и службы Google. Используйте это, когда нет действительных учетных данных или если инструмент не работает из-за отсутствия аутентификации и ему не был предоставлен адрес электронной почты. | •
(обязательно): адрес электронной почты пользователя Google. •
(обязательно): имя службы Google (например, «Google Calendar», «Google Docs», «Gmail», «Google Drive»). |
| Перечисляет все календари, доступные аутентифицированному пользователю. | •
(необязательно): используется, если сеанс не аутентифицирован •
(вводится автоматически) |
| Извлекает предстоящие события из указанного календаря в указанном диапазоне времени. | •
(необязательно): идентификатор календаря (по умолчанию:
) •
(необязательно): время начала (RFC3339 или
) •
(необязательно): время окончания (RFC3339 или
) •
(необязательно): максимальное количество событий (по умолчанию: 25) •
(необязательно) •
(вставляется автоматически) |
| Создает новое событие календаря. Поддерживает события на весь день и события с заданным временем. | •
(обязательно): Название события•
(обязательно): Время начала (RFC3339 или
)•
(обязательно): Время окончания (RFC3339 или
)•
(необязательно): Идентификатор календаря (по умолчанию:
)•
,
,
,
(необязательно)•
(необязательно)•
(вставляется автоматически) |
| Обновляет существующее событие по 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
Инструмент | Описание | Параметры |
| Поиск файлов и папок на Диске пользователя. | •
(обязательно): строка поискового запроса (например,
) •
(необязательно): максимальное количество возвращаемых файлов |
| Извлекает содержимое определенного файла | •
(обязательно): идентификатор файла. •
(необязательно): укажите желаемый формат экспорта. |
| Выводит список файлов и папок в определенной папке или корне | •
(необязательно): идентификатор папки для отображения (по умолчанию — root) •
(необязательно): максимальное количество возвращаемых элементов |
| Создает новый файл на Google Диске | •
(обязательно): желаемое имя для нового файла. •
(обязательно): текстовое содержимое для записи в файл. •
(необязательно): идентификатор родительской папки. •
(необязательно): тип MIME файла (по умолчанию
). |
Синтаксис запроса : для поисковых запросов Google Диска см. Синтаксис поискового запроса Диска.
📧 Gmail
Источник: gmail/gmail_tools.py
Инструмент | Описание | Параметры |
| Поиск сообщений электронной почты с использованием стандартных операторов поиска Gmail (от, тема и т. д.). | •
(обязательно): строка поиска (например,
) •
(необязательно) •
(необязательно, по умолчанию: 10) •
(вставляется автоматически) |
| Получите тему, отправителя и текст письма по идентификатору сообщения. | •
(обязательно)•
(необязательно)•
(вставляется автоматически) |
| Отправьте текстовое электронное письмо, используя учетную запись Gmail пользователя. | •
(обязательно): Адрес электронной почты получателя •
(обязательно) •
(обязательно) •
(необязательно) •
(вставляется автоматически) |
| Создайте черновик электронного письма в аккаунте Gmail пользователя. | •
(обязательно): Тема письма•
(обязательно): Тело письма (обычный текст)•
(необязательно): Адрес электронной почты получателя•
(необязательно)•
(вставляется автоматически) |
Синтаксис запроса : для поисковых запросов Gmail см. Синтаксис поискового запроса Gmail
📝 Google Документы
Источник: gdocs/docs_tools.py
Инструмент | Описание | Параметры |
| Поиск Google Docs по названию (с использованием Drive API). | •
(обязательно): Текст для поиска в именах документов •
(необязательно) •
(необязательно, по умолчанию: 10) •
(вставляется автоматически) |
| Извлечение текстового содержимого документа Google по его идентификатору. | •
(обязательно)•
(необязательно)•
(вставляется автоматически) |
| Вывести список всех документов Google в указанной папке Диска (по идентификатору папки, по умолчанию =
). | •
(необязательно, по умолчанию:
) •
(необязательно) •
(необязательно, по умолчанию: 100) •
(вставляется автоматически) |
| Создайте новый документ Google, при желании с исходным содержимым. | •
(обязательно): Имя документа •
(необязательно, по умолчанию: пусто) •
(необязательно) •
(вставляется автоматически) |
🛠️ Развитие
Структура проекта
Обработка портов для 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.
Добавление новых инструментов
Выберите или создайте соответствующий модуль (например,
gdocs/gdocs_tools.py)Импортировать необходимые библиотеки (клиентскую библиотеку Google API и т. д.)
Определите
asyncфункцию для логики вашего инструмента. Используйте подсказки типов для параметровУкрасьте функцию с помощью
@server.tool("your_tool_name")Внутри функции получите аутентифицированные учетные данные:
Создайте клиент службы API Google:
service = build('drive', 'v3', credentials=credentials)Реализовать логику вызова API Google
Грамотно обрабатывайте потенциальные ошибки
Возвращает результаты в виде словаря или списка, сериализуемого в формате JSON.
Импортируйте функцию инструмента в
main.py, чтобы она была зарегистрирована на сервере.Определите необходимые константы области действия, специфичные для сервиса, в модуле вашего инструмента.
Обновите
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для предоставления доступа к серверу по сети учтите следующее:Использование опции
--api-keyдля базовой аутентификацииЗапуск
mcpoза обратным прокси-сервером (например, Nginx или Caddy) для обработки HTTPS-терминации, надлежащего ведения журнала и более надежной аутентификации.Привязка
mcpoтолько к доверенным сетевым интерфейсам, если он доступен за пределами localhost
Управление областью действия : сервер запрашивает определенные области действия OAuth (разрешения) для Календаря, Диска и Gmail. Пользователи предоставляют доступ на основе этих областей действия во время первоначальной аутентификации. Не запрашивайте более широкие области действия, чем необходимо для реализованных инструментов.
Скриншоты:
📄 Лицензия
Данный проект лицензирован по лицензии MIT — подробности см. в файле LICENSE .