Skip to main content
Glama
REVREBEL

Google Calendar MCP OAuth Proxy

by REVREBEL

Google Calendar MCP OAuth-прокси

Этот Worker выступает в роли OAuth-границы между MCP-клиентом, таким как Codex, и официальным Calendar MCP от Google.

Codex / MCP client
        |
        | OAuth to this Worker
        v
Cloudflare OAuth Provider
        |
        | Google OAuth (client ID + client secret)
        v
Google OAuth
        |
        | Google access token
        v
Google Calendar MCP
https://calendarmcp.googleapis.com/mcp/v1

Клиент никогда не получает OAuth-клиентский секрет Google. Access- и refresh-токены Google хранятся в зашифрованных свойствах OAuth-grant, управляемых Cloudflare OAuth-провайдером. Защищённый обработчик /mcp перед передачей MCP-трафика наверх заменяет локальный bearer-токен клиента на Google access-токен пользователя.

Области Google

В wrangler.jsonc области Google Calendar задаются в переменной GOOGLE_OAUTH_SCOPES:

https://www.googleapis.com/auth/calendar.calendarlist.readonly
https://www.googleapis.com/auth/calendar.events.freebusy
https://www.googleapis.com/auth/calendar.events.readonly
https://www.googleapis.com/auth/calendar.calendars

Worker автоматически добавляет email profile, потому что при обратном вызове для идентификации авторизованного пользователя используется user-info endpoint Google.

В запросе авторизации Google также используются параметры access_type=offline и prompt=consent, чтобы Google возвращал refresh-токен.

Related MCP server: google-mcp-server

Локальные секреты

Скопируйте файл-пример:

cp .dev.vars.example .dev.vars

Задайте:

GOOGLE_CLIENT_ID=<Google OAuth web client ID>
GOOGLE_CLIENT_SECRET=<Google OAuth client secret>
COOKIE_ENCRYPTION_KEY=<strong random secret>
HOSTED_DOMAIN=<optional Google Workspace domain restriction>

GOOGLE_OAUTH_SCOPES и GOOGLE_MCP_URL — это несекретные переменные Worker в wrangler.jsonc.

OAuth-клиент Google Cloud

Используйте OAuth-клиент Google типа веб-приложение.

Авторизованный redirect URI должен быть публичным именем хоста этого Worker или туннеля с добавлением /callback:

https://mcp-auth.example.com/callback

Добавьте указанные выше области Calendar в конфигурацию согласия и доступа к данным Google Auth Platform.

Локальный запуск

Установите зависимости и сгенерируйте типы Worker:

npm install
npm run cf-typegen

Запустите Wrangler локально на порту 5555:

npm run dev

Локальный endpoint:

http://localhost:5555/mcp

OAuth requires public HTTPS callback, поэтому для полного локального тестирования используйте Cloudflare Tunnel.

Stable named tunnel

Стабильное имя хоста предпочтительно, потому что один и тот же callback должен быть зарегистрирован в Google Cloud.

npx wrangler dev --tunnel-name=mcp-google-auth --tunnel

Настройте имя хоста именованного туннеля так, чтобы оно вело на разработочённый сервер Wrangler. Например:

https://mcp-auth.example.com  ->  local Wrangler dev server

Затем укажите:

https://mcp-auth.example.com/callback

в качестве redirect URI для Google OAuth.

URL MCP, который видит Codex:

https://mcp-auth.example.com/mcp

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

Поскольку для Codex этот Worker является OAuth-сервером авторизации, Codex не нужен Google client ID или Google client secret.

[mcp_servers.google_calendar_proxy]
enabled = true
url = "https://mcp-auth.example.com/mcp"
auth = "oauth"

Затем выполните аутентификацию:

codex mcp login google_calendar_proxy

Ожидаемый процесс:

  1. Codex обнаруживает OAuth-эндпоинты этого Worker.

  2. Codex регистрируется на этом Worker или проходит аутентификацию.

  3. Worker перенаправляет браузер в Google.

  4. Google возвращается на /callback на Worker/туннеле.

  5. Worker обменивает код авторизации Google на токены, используя GOOGLE_CLIENT_SECRET.

  6. Codex получает OAuth-токен, выпущенный Worker.

  7. Вызовы /mcp перенаправляются в официальный Calendar MCP Google с использованием Google access-токена пользователя.

Поведение при обновлении токенов

Google refresh-токен сохраняется в зашифрованных свойствах OAuth-grant. Прокси хранит ограниченный LRU-кэш Google access-токенов, локальный для изолята, удаляет записи при наступлении окна обновления и ограничивает кэш 100 пользователями. Если сохранённый access-токен истёк или Google MCP возвращает 401, Worker использует Google refresh-токен и клиентский секрет на стороне Worker, чтобы выпустить новый Google access-токен, и повторяет запрос один раз.

Кэш в памяти — лишь оптимизация. Новый изоляnированный Worker в любой момент может выполнить обновление из зашифрованных свойств grant.

Устаревшие гранты

OAuth-гранты, созданные до появления поддержки refresh-токенов, содержат только исходный Google access-токен и метаданные пользователя. Прокси обнаруживает такие гранты и продолжает использовать их существующий access-токен, пока Google его принимает. Когда Google отклоняет этот токен, Worker возвращает 401 invalid_token, чтобы подключение MCP можно было авторизовать заново, а не пытаться выполнить обновление с отсутствующими учётными данными.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Streamable HTTP MCP server for Google Calendar and Sheets with OAuth login.

  • Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.

  • Self-hosted federated MCP gateway: one OAuth 2.1 MCP server in front of N apps, user-level scopes.

View all MCP Connectors

Latest Blog Posts

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/REVREBEL/cloudflare-mcp-google-auth'

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