Google Calendar MCP OAuth Proxy
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.calendarsWorker автоматически добавляет 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/mcpOAuth 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Ожидаемый процесс:
Codex обнаруживает OAuth-эндпоинты этого Worker.
Codex регистрируется на этом Worker или проходит аутентификацию.
Worker перенаправляет браузер в Google.
Google возвращается на
/callbackна Worker/туннеле.Worker обменивает код авторизации Google на токены, используя
GOOGLE_CLIENT_SECRET.Codex получает OAuth-токен, выпущенный Worker.
Вызовы
/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 можно было авторизовать заново, а не пытаться выполнить обновление с отсутствующими учётными данными.
This server cannot be deployed
Maintenance
Related MCP Connectors
Streamable HTTP MCP server for Google Calendar and Sheets with OAuth login.
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
OAuth MCP for Google, Meta, X, LinkedIn, Reddit, TikTok, GSC, GA4, WordPress and GHL.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables authentication and authorization with Google's OAuth2 API, allowing users to securely authenticate and access Google services through natural language interactions.-
- AlicenseNot gradedqualityBmaintenanceMCP Server for Google Services, with the ability to define your own scopes and bring your own oauth key.3MIT
- FlicenseNot gradedqualityDmaintenanceEnables seamless Google Calendar integration with MCP-compatible clients, allowing creation, viewing, updating, and deletion of calendar events via OAuth 2.0 authentication.-
- FlicenseNot gradedqualityDmaintenanceEnables multi-user access to Google Workspace services (Gmail, Calendar, Docs, Sheets, Slides, Drive) via remote MCP with OAuth 2.1 authentication.-