{"_id":"@a1-x-tech/mcp-google-calendar","_rev":"3-bd1322c8f1447443a52ed4c9377c6508","name":"@a1-x-tech/mcp-google-calendar","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.0":{"name":"@a1-x-tech/mcp-google-calendar","version":"0.1.0","keywords":["mcp","model-context-protocol","google","google-calendar","calendar","events","scheduling","google-meet","claude","cursor","codex"],"author":{"name":"gistrec","email":"gistrec@gmail.com"},"license":"MIT","_id":"@a1-x-tech/mcp-google-calendar@0.1.0","maintainers":[{"name":"gistrec","email":"gistrec@gmail.com"}],"homepage":"https://github.com/A1-x-Tech/mcp-google-calendar#readme","bugs":{"url":"https://github.com/A1-x-Tech/mcp-google-calendar/issues"},"bin":{"mcp-google-calendar":"dist/index.js"},"dist":{"shasum":"fae8195186ed4444874dc2e3e7eb93f507f513b9","tarball":"https://registry.npmjs.org/@a1-x-tech/mcp-google-calendar/-/mcp-google-calendar-0.1.0.tgz","fileCount":15,"integrity":"sha512-0AMvDtKgBBWuf6jbm/tUDCw1lBRR2Wkqnm7FscBlgSVfpJa/V9vY2+hrH9D4QCURv6Czx8ePhMsBDW0AICCAtw==","signatures":[{"sig":"MEUCIQDIfy1yH++WWcaFW9R/x4UxNjxyyChWT6vwLMxuz6h5JgIgLX6UvBKG/vBYClh6wDASwqb/RXtsTkFWXMZdAPdH8Hc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111477},"type":"module","engines":{"node":">=20"},"gitHead":"41dae11f869f5b7cab682f196eb63dc7de478a57","mcpName":"io.github.A1-x-Tech/mcp-google-calendar","scripts":{"dev":"tsx watch src/index.ts","test":"npm run test:src && npm run test:dist","build":"rm -rf dist && tsc","smoke":"node --import tsx src/smoke.ts","start":"node dist/index.js","prepare":"npm run build","test:src":"node --import tsx --test $(find src -name '*.test.ts')","test:dist":"npm run build && node --test test/dist-smoke.test.js","typecheck":"tsc -p tsconfig.check.json","prepublishOnly":"npm run typecheck && npm test"},"_npmUser":{"name":"gistrec","email":"gistrec@gmail.com"},"repository":{"url":"git+https://github.com/A1-x-Tech/mcp-google-calendar.git","type":"git"},"_npmVersion":"11.12.1","description":"MCP server for the Google Calendar API — list calendars, create and manage events, attendees, Google Meet, recurring events, free/busy, Out of Office and Focus Time. For Claude, Cursor, Codex and other AI clients.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"^3.25.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","typescript":"^5.7.0","@types/node":"^25.9.3"},"_npmOperationalInternal":{"tmp":"tmp/mcp-google-calendar_0.1.0_1788054576495_0.20247725151222795","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@a1-x-tech/mcp-google-calendar","version":"0.2.0","keywords":["mcp","model-context-protocol","google","google-calendar","calendar","events","scheduling","google-meet","claude","cursor","codex"],"author":{"name":"gistrec","email":"gistrec@gmail.com"},"license":"MIT","_id":"@a1-x-tech/mcp-google-calendar@0.2.0","maintainers":[{"name":"gistrec","email":"gistrec@gmail.com"}],"homepage":"https://github.com/A1-x-Tech/mcp-google-calendar#readme","bugs":{"url":"https://github.com/A1-x-Tech/mcp-google-calendar/issues"},"bin":{"mcp-google-calendar":"dist/index.js"},"dist":{"shasum":"0ab80647686c36b5184704fe46253aa7d4ccb31d","tarball":"https://registry.npmjs.org/@a1-x-tech/mcp-google-calendar/-/mcp-google-calendar-0.2.0.tgz","fileCount":17,"integrity":"sha512-7e15mdemjSSVJrZB3wkrBWl2zQ3QkoCppiB7NowS/uxHcqUm8XNiV1kfyXKaLo59axF3Lem/BdgSoeTOeYgqBQ==","signatures":[{"sig":"MEQCIC2w83naCt6GwirNd+aPsFqKZQkF3Nf0mhx6EiXnn0cPAiAwejHFwhAdnT0x/rHjDMku1O/hu0taJU1dKqEpgRvmUA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCBClZlYr2nAdqrDnQ0tOcgik8RpavDXdKzVR3lopmpVwIgAxZlmTdQusL4nFRrjsIo+5ou2qJkExdrXaSaEd0VHpU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126520},"type":"module","engines":{"node":">=20"},"gitHead":"b5ca7c72ff7fa1012769ef29c6abe632197c58e2","mcpName":"io.github.A1-x-Tech/mcp-google-calendar","scripts":{"dev":"tsx watch src/index.ts","test":"npm run test:src && npm run test:dist","build":"rm -rf dist && tsc","smoke":"node --import tsx src/smoke.ts","start":"node dist/index.js","prepare":"npm run build","test:src":"node --import tsx --test $(find src -name '*.test.ts')","test:dist":"npm run build && node --test test/dist-smoke.test.js","typecheck":"tsc -p tsconfig.check.json","prepublishOnly":"npm run typecheck && npm test && npm run check:publishable","check:publishable":"node --test test/publish-safety.test.js"},"_npmUser":{"name":"gistrec","email":"gistrec@gmail.com"},"repository":{"url":"git+https://github.com/A1-x-Tech/mcp-google-calendar.git","type":"git"},"_npmVersion":"11.12.1","description":"MCP server for the Google Calendar API — list calendars, create and manage events, attendees, Google Meet, recurring events, free/busy, Out of Office and Focus Time. For Claude, Cursor, Codex and other AI clients.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"^3.25.0","@modelcontextprotocol/sdk":"^1.29.0","@a1-x-tech/mcp-google-auth":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","typescript":"^5.7.0","@types/node":"^25.9.3"},"_npmOperationalInternal":{"tmp":"tmp/mcp-google-calendar_0.2.0_1789911792415_0.2019975802909435","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"_id":"@a1-x-tech/mcp-google-calendar@1.0.0","bin":{"mcp-google-calendar":"dist/index.js"},"bugs":{"url":"https://github.com/A1-x-Tech/mcp-google-calendar/issues"},"dist":{"shasum":"314f0715d8125b854ef7db08269712a9b9f8b108","tarball":"https://registry.npmjs.org/@a1-x-tech/mcp-google-calendar/-/mcp-google-calendar-1.0.0.tgz","fileCount":17,"integrity":"sha512-f8TlsdjIUE+ZKiVY0Ok0PLoVI/RoOfV0ZDX95ZQbdxEOu6ODuFlhFRhfkpEU6MUTCgSNXPULk9gkmOX6B3l1vA==","signatures":[{"sig":"MEUCIEQORuFY3v5SfOGWcLF5ETF21NU5GiJdgs6fSeBe71WWAiEAwmunyF1lHZQdERk0+Gi4dBg++kwQzTvSbeZ7iX722PI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDfI3QMWYOYDMEzsJkaATmWciQVrlwqWvhsFiaONbstvQIgcUygaS2VbLNCjI0oUQTqxVdSn3zZKokCNRSYYV9bFIw="}],"unpackedSize":127663},"name":"@a1-x-tech/mcp-google-calendar","type":"module","author":{"name":"gistrec","email":"gistrec@gmail.com"},"engines":{"node":">=20"},"gitHead":"980b513dd2d4702d552de54881badc70c7b0e59d","license":"MIT","mcpName":"io.github.A1-x-Tech/mcp-google-calendar","scripts":{"dev":"tsx watch src/index.ts","test":"npm run test:src && npm run test:dist","build":"rm -rf dist && tsc","smoke":"node --import tsx src/smoke.ts","start":"node dist/index.js","prepare":"npm run build","test:src":"node --import tsx --test $(find src -name '*.test.ts')","test:dist":"npm run build && node --test test/dist-smoke.test.js","typecheck":"tsc -p tsconfig.check.json","prepublishOnly":"npm run typecheck && npm test && npm run check:publishable","check:publishable":"node --test test/publish-safety.test.js"},"version":"1.0.0","_npmUser":{"name":"gistrec","email":"gistrec@gmail.com"},"homepage":"https://github.com/A1-x-Tech/mcp-google-calendar#readme","keywords":["mcp","model-context-protocol","google","google-calendar","calendar","events","scheduling","google-meet","claude","cursor","codex"],"repository":{"url":"git+https://github.com/A1-x-Tech/mcp-google-calendar.git","type":"git"},"_npmVersion":"11.12.1","description":"MCP server for the Google Calendar API — list calendars, create and manage events, attendees, Google Meet, recurring events, free/busy, Out of Office and Focus Time. For Claude, Cursor, Codex and other AI clients.","directories":{},"maintainers":[{"name":"gistrec","email":"gistrec@gmail.com"}],"_nodeVersion":"24.15.0","dependencies":{"zod":"^3.25.0","@modelcontextprotocol/sdk":"^1.29.0","@a1-x-tech/mcp-google-auth":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","typescript":"^5.7.0","@types/node":"^25.9.3"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-google-calendar_1.0.0_1790203316961_0.42125789253885393"}}},"time":{"created":"2026-08-30T01:49:36.354Z","modified":"2026-09-23T22:41:57.242Z","0.1.0":"2026-08-30T01:49:36.646Z","0.2.0":"2026-09-20T13:43:12.506Z","1.0.0":"2026-09-23T22:41:57.049Z"},"bugs":{"url":"https://github.com/A1-x-Tech/mcp-google-calendar/issues"},"author":{"name":"gistrec","email":"gistrec@gmail.com"},"license":"MIT","homepage":"https://github.com/A1-x-Tech/mcp-google-calendar#readme","keywords":["mcp","model-context-protocol","google","google-calendar","calendar","events","scheduling","google-meet","claude","cursor","codex"],"repository":{"url":"git+https://github.com/A1-x-Tech/mcp-google-calendar.git","type":"git"},"description":"MCP server for the Google Calendar API — list calendars, create and manage events, attendees, Google Meet, recurring events, free/busy, Out of Office and Focus Time. For Claude, Cursor, Codex and other AI clients.","maintainers":[{"name":"gistrec","email":"gistrec@gmail.com"}],"readme":"# <img src=\"./assets/a1-logo.svg\" alt=\"A1\" width=\"40\"> Google Calendar MCP\n\n[English](./README.md) | **Русский**\n\n[![npm](https://img.shields.io/npm/v/%40a1-x-tech%2Fmcp-google-calendar)](https://www.npmjs.com/package/@a1-x-tech/mcp-google-calendar)\n[![CI](https://github.com/A1-x-Tech/mcp-google-calendar/actions/workflows/ci.yml/badge.svg)](https://github.com/A1-x-Tech/mcp-google-calendar/actions/workflows/ci.yml)\n[![Glama](https://glama.ai/mcp/servers/A1-x-Tech/mcp-google-calendar/badges/score.svg)](https://glama.ai/mcp/servers/A1-x-Tech/mcp-google-calendar)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)\n\n**A1 Google Calendar MCP** позволяет AI-приложению управлять Google Calendar на естественном языке. Можно просмотреть неделю, назначить встречу с гостями и ссылкой на Google Meet, перенести или отменить её, найти слот, когда все свободны, и заблокировать время под Out of Office или Focus Time.\n\nСервер работает с Google Calendar API через ваш Google-аккаунт. Он отличает целую повторяющуюся серию от отдельного вхождения и явно показывает ограничения Calendar API, а не создаёт впечатление, что через календарь можно сделать всё.\n\n- **19 инструментов.** Просмотр календарей, событий и занятости, создание и редактирование встреч, работа с повторяющимися сериями, блоки Out of Office и Focus Time — плюс шесть для подключения Google-аккаунта.\n- **Вход прямо из диалога.** Файл с учётными данными писать руками не нужно: попросите ассистента подключиться, подтвердите доступ в браузере — и следующий же запрос сработает без перезапуска. Client secret передаётся путём к файлу и никогда не проходит через переписку.\n- **Никто не получит письмо случайно.** По умолчанию Calendar API молчит о приглашениях, изменениях и отменах; гости получают письма, только когда вы попросите об этом через `send_updates`.\n- **Запись не повторяется вслепую.** После неопределённого сбоя сервер не повторяет запись: продублированное событие может заново разослать письма всем гостям.\n- **Минимальные scope Google.** Используются `calendar.events` и `calendar.readonly` без широкого scope `calendar`.\n\nНачните с запроса, который только читает данные:\n\n> Что у меня в календаре на этой неделе? Отметь пересекающиеся встречи.\n\n[Подключить сервер](#быстрый-старт) · [Посмотреть сценарии](#что-можно-поручить) · [Открыть техническую документацию](#техническая-документация)\n\n---\n\n## Увидеть работу за минуту\n\n> **Вы:** Как выглядит мой четверг и когда мы с Анной оба свободны?\n>\n> **Ассистент:** Показывает события четверга и общие свободные интервалы. Ничего не меняется.\n>\n> **Вы:** Забронируй 45-минутное дизайн-ревью с Анной в первый общий слот и добавь ссылку на Google Meet.\n>\n> **Ассистент:** Показывает предлагаемое время, список гостей и ссылку Meet, затем запрашивает подтверждение перед созданием события.\n>\n> **Вы:** Подтверждаю.\n>\n> **Ассистент:** Создаёт событие. Никто не получит письмо, пока вы не попросите отправить приглашения.\n\n## Содержание\n\n- [Быстрый старт](#быстрый-старт)\n- [Что можно поручить](#что-можно-поручить)\n- [Как меняется событие](#как-меняется-событие)\n- [Что может измениться](#что-может-измениться)\n- [Как получить доступ](#как-получить-доступ)\n- [Конфигурация](#конфигурация)\n- [Данные, лимиты и работа в фоне](#данные-лимиты-и-работа-в-фоне)\n- [Техническая документация](#техническая-документация)\n- [Поддержка](#поддержка)\n\n## Быстрый старт\n\nНужны Node.js 20+, Google-аккаунт и OAuth-данные из проекта Google Cloud с включённым Google Calendar API.\n\n1. [Подготовьте Google OAuth-доступ](#как-получить-доступ).\n2. Добавьте сервер в AI-приложение.\n3. Отправьте запрос, который только читает данные.\n\n<details open>\n<summary><strong>Codex</strong></summary>\n\n<br>\n\n**В приложении:** откройте **Settings → MCP servers**, нажмите **Add server**, выберите **STDIO**, укажите команду `npx -y @a1-x-tech/mcp-google-calendar@latest` и переменные окружения `GOOGLE_CALENDAR_CLIENT_ID`, `GOOGLE_CALENDAR_CLIENT_SECRET`, `GOOGLE_CALENDAR_REFRESH_TOKEN`, затем нажмите **Save**, потом **Restart**.\n\n**В командной строке:**\n\n```bash\ncodex mcp add google-calendar \\\n  --env GOOGLE_CALENDAR_CLIENT_ID=your_client_id \\\n  --env GOOGLE_CALENDAR_CLIENT_SECRET=your_client_secret \\\n  --env GOOGLE_CALENDAR_REFRESH_TOKEN=your_refresh_token \\\n  -- npx -y @a1-x-tech/mcp-google-calendar@latest\n```\n\n```bash\ncodex mcp list\n```\n\n[Документация Codex MCP](https://learn.chatgpt.com/docs/extend/mcp?surface=cli)\n\n</details>\n\n<details>\n<summary><strong>Claude Code</strong></summary>\n\n<br>\n\n```bash\nclaude mcp add \\\n  --env GOOGLE_CALENDAR_CLIENT_ID=your_client_id \\\n  --env GOOGLE_CALENDAR_CLIENT_SECRET=your_client_secret \\\n  --env GOOGLE_CALENDAR_REFRESH_TOKEN=your_refresh_token \\\n  --transport stdio --scope user google-calendar \\\n  -- npx -y @a1-x-tech/mcp-google-calendar@latest\n```\n\n```bash\nclaude mcp list\n```\n\n[Документация Claude Code MCP](https://code.claude.com/docs/en/mcp)\n\n</details>\n\n<details>\n<summary><strong>Claude Desktop</strong></summary>\n\n<br>\n\nАктуальный официальный путь — **Settings → Extensions**. Для пользовательского desktop extension откройте **Advanced settings → Extension Developer → Install Extension…**, выберите файл `.mcpb` и следуйте подсказкам.\n\nЭтот репозиторий сейчас публикует npm-пакет со stdio и пока не содержит `.mcpb`. Поэтому используйте приведённый ниже JSON stdio-конфиг как fallback только в сборках Claude Desktop, где ещё поддерживается локальная конфигурация:\n\n```json\n{\n  \"mcpServers\": {\n    \"google-calendar\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@a1-x-tech/mcp-google-calendar@latest\"],\n      \"env\": {\n        \"GOOGLE_CALENDAR_CLIENT_ID\": \"your_client_id\",\n        \"GOOGLE_CALENDAR_CLIENT_SECRET\": \"your_client_secret\",\n        \"GOOGLE_CALENDAR_REFRESH_TOKEN\": \"your_refresh_token\"\n      }\n    }\n  }\n}\n```\n\nВ таких сборках сохраните его в `~/Library/Application Support/Claude/claude_desktop_config.json` на macOS или `%APPDATA%\\Claude\\claude_desktop_config.json` на Windows.\n\n[Документация Claude Desktop MCP](https://support.claude.com/en/articles/10949351-getting-started-with-local-mcp-servers-on-claude-desktop)\n\n</details>\n\n<details>\n<summary><strong>Cursor</strong></summary>\n\n<br>\n\nДобавьте в `~/.cursor/mcp.json` на macOS/Linux или `%USERPROFILE%\\.cursor\\mcp.json` на Windows:\n\n```json\n{\n  \"mcpServers\": {\n    \"google-calendar\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@a1-x-tech/mcp-google-calendar@latest\"],\n      \"env\": {\n        \"GOOGLE_CALENDAR_CLIENT_ID\": \"your_client_id\",\n        \"GOOGLE_CALENDAR_CLIENT_SECRET\": \"your_client_secret\",\n        \"GOOGLE_CALENDAR_REFRESH_TOKEN\": \"your_refresh_token\"\n      }\n    }\n  }\n}\n```\n\n[Документация Cursor MCP](https://cursor.com/docs/mcp)\n\n</details>\n\n<details>\n<summary><strong>VS Code</strong></summary>\n\n<br>\n\nЗапустите **MCP: Open User Configuration** и добавьте:\n\n```json\n{\n  \"servers\": {\n    \"google-calendar\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@a1-x-tech/mcp-google-calendar@latest\"],\n      \"env\": {\n        \"GOOGLE_CALENDAR_CLIENT_ID\": \"${input:calendar_client_id}\",\n        \"GOOGLE_CALENDAR_CLIENT_SECRET\": \"${input:calendar_client_secret}\",\n        \"GOOGLE_CALENDAR_REFRESH_TOKEN\": \"${input:calendar_refresh_token}\"\n      }\n    }\n  },\n  \"inputs\": [\n    { \"type\": \"promptString\", \"id\": \"calendar_client_id\", \"description\": \"Google OAuth client ID\" },\n    { \"type\": \"promptString\", \"id\": \"calendar_client_secret\", \"description\": \"Google OAuth client secret\", \"password\": true },\n    { \"type\": \"promptString\", \"id\": \"calendar_refresh_token\", \"description\": \"Google OAuth refresh token\", \"password\": true }\n  ]\n}\n```\n\nПроверьте сервер командой **MCP: List Servers**.\n\n[Документация VS Code MCP](https://code.visualstudio.com/docs/agent-customization/mcp-servers)\n\n</details>\n\n## Что можно поручить\n\n### Посмотреть расписание\n\n- Какие встречи у меня на этой неделе? Включи повторяющиеся.\n- Покажи завтрашний 1:1 с гостями, ссылкой Meet и напоминаниями.\n- Перечисли все вхождения командного синка в марте.\n\n### Планировать и менять встречи\n\n- Создай 45-минутное ревью в четверг с двумя гостями и ссылкой на Google Meet.\n- Перенеси ретро на час позже и обнови список гостей — но пока никому не отправляй писем.\n- Перемести событие с планированием в командный календарь.\n- Отмени пятничное вхождение стендапа, не трогая остальную серию.\n\n### Защитить время\n\n- Когда мы с Анной и Борисом все трое свободны на час на следующей неделе?\n- Поставь Out of Office на отпуск и автоматически отклоняй новые приглашения.\n- Создай два часа Focus Time завтра утром и включи «не беспокоить» в Google Chat.\n\n## Как меняется событие\n\n1. `calendar_id: \"primary\"` — ваш основной календарь; другие календари берутся из `list_calendars`, для записи нужен доступ writer.\n2. У повторяющейся **серии** и отдельного **вхождения** разные id: id серии меняет или отменяет все вхождения, id вхождения (из `list_event_instances`) — ровно одно.\n3. `update_event` меняет только переданные поля, но вложенный объект заменяется целиком — новый список `attendees` замещает весь список гостей.\n4. Ни одна запись не отправляет писем, пока `send_updates` не попросит об этом: по умолчанию Calendar API молчит.\n\nБлоки Out of Office и Focus Time существуют только в основном календаре аккаунта Google Workspace; обычный Gmail и дополнительные календари их отклоняют. Создание события не проверяет конфликты — сначала попросите проверить занятость. У событий на весь день дата окончания не включается: событие по пятницу включительно заканчивается субботней датой.\n\n## Что может измениться\n\n| Операция | Что происходит | Граница подтверждения |\n|---|---|---|\n| Чтение календарей, событий и занятости | Читает расписание; занятость показывает интервалы без названий встреч | Ничего не меняет |\n| Создание события | Добавляет событие со временем, на весь день или повторяющееся, при необходимости с гостями и Google Meet | Меняет календарь |\n| Создание блока Out of Office или Focus Time | Добавляет специальное событие, которое может автоматически отклонять приглашения или включать «не беспокоить» в Google Chat | Меняет календарь |\n| Обновление события | Переносит или редактирует событие; id серии меняет все вхождения | Меняет календарь |\n| Перенос события | Перемещает событие в другой календарь | Меняет два календаря |\n| Удаление события | Отменяет событие или всю серию; восстановления нет | Разрушительно |\n| Технический запрос API | Может вызвать метод API без отдельного инструмента | Потенциально разрушительно |\n\nКак AI-приложение просит подтверждение, определяет само приложение. Сервер помечает операции чтения, записи и удаления, чтобы оно отличило проверку от рабочего изменения.\n\n## Как получить доступ\n\nДоступ к собственным календарям требует OAuth 2.0: одного API-ключа недостаточно. Подключиться можно двумя способами, и первый вообще не требует файла конфигурации.\n\n### Вход из диалога\n\nЗапустите сервер без учётных данных и попросите ассистента подключиться. Он проведёт вас по шагам с помощью шести встроенных инструментов:\n\n| Инструмент | Что делает |\n|---|---|\n| `setup_instructions` | Пошаговый чеклист для стороны Google Cloud, с учётом того, что уже настроено |\n| `set_client` | Читает скачанный JSON OAuth-клиента — **по пути к файлу, поэтому секрет не проходит через диалог** |\n| `start_login` | Возвращает ссылку авторизации Google и ждёт браузер |\n| `finish_login` | Подтверждает вход и сообщает, какой аккаунт подключён |\n| `auth_status` | Есть ли вход, откуда он взят и когда истекает — но никогда сам токен |\n| `logout` | Отзывает токен на стороне Google и удаляет локальный файл |\n\nВход вступает в силу сразу: следующий вызов инструмента сработает без перезапуска AI-клиента. Токен хранится в `~/.config/mcp-google-calendar/credentials.json` (в Windows — в `%APPDATA%`), доступен только вашей учётной записи и не покидает вашу машину.\n\n### Либо переменные окружения\n\nКлассический путь и единственный подходящий для CI и безбраузерных установок:\n\n1. Создайте или выберите проект Google Cloud и включите **Google Calendar API**.\n2. Настройте OAuth consent screen и создайте OAuth-клиент типа **Desktop app**.\n3. Авторизуйте Google-аккаунт, календарями которого хотите управлять. [OAuth 2.0 Playground](https://developers.google.com/oauthplayground) поможет получить refresh token, если включить **Use your own OAuth credentials**.\n4. Запросите оба scope:\n\n   ```text\n   https://www.googleapis.com/auth/calendar.events\n   https://www.googleapis.com/auth/calendar.readonly\n   ```\n\n   Широкий scope `https://www.googleapis.com/auth/calendar` нужен только для вызовов `raw_request`, которые управляют самими календарями или правами доступа к ним.\n\nПеременные окружения всегда побеждают вход, сделанный из диалога, поэтому уже настроенная установка продолжит работать ровно как раньше.\n\nRefresh token OAuth-приложения в режиме Testing может истечь через семь дней. Для долгого доступа опубликуйте OAuth-приложение или используйте Internal-приложение в домене Workspace. Храните client secret и refresh token как пароли.\n\n## Конфигурация\n\n| Переменная | Обязательна | Описание |\n|---|---|---|\n| `GOOGLE_CALENDAR_CLIENT_ID` | Да* | OAuth client ID. |\n| `GOOGLE_CALENDAR_CLIENT_SECRET` | Да* | OAuth client secret. |\n| `GOOGLE_CALENDAR_REFRESH_TOKEN` | Да* | OAuth refresh token. |\n| `GOOGLE_CALENDAR_ACCESS_TOKEN` | Да* | Короткоживущая (~1 час) альтернатива OAuth-тройке. |\n| `GOOGLE_CALENDAR_API_BASE` | Нет | Переопределяет базовый URL Google API; по умолчанию `https://www.googleapis.com`. |\n| `GOOGLE_CALENDAR_TIMEOUT_MS` | Нет | Тайм-аут одного запроса; по умолчанию `60000` мс. |\n| `GOOGLE_CALENDAR_MAX_RETRIES` | Нет | Повторы временных ошибок; по умолчанию `3`. |\n\n\\* Передайте OAuth-тройку или access token. Без учётных данных сервер всё равно стартует и отвечает на MCP-рукопожатие; первый вызов инструмента назовёт переменные, которые нужно задать.\n\n## Данные, лимиты и работа в фоне\n\n- **Запросы идут в Google Calendar.** Локальный сервер обновляет OAuth-токены Google и вызывает Calendar API. Анонимная телеметрия содержит ID установки, версию пакета, версии AI-клиента и платформы и имена инструментов — но не OAuth-токены, данные календаря, аргументы или промпты. Чтобы отключить её, задайте `ASKADS_TELEMETRY=0`.\n- **У Google есть квоты на проект.** При `429` сервер повторяет запрос с задержкой; чтение также повторяется после сетевых и `5xx` ошибок, а запись после неопределённого сбоя не повторяется — продублированное событие может заново разослать письма всем гостям.\n- **Постоянного опроса нет.** Сервер работает только при вызове. `list_events` поддерживает инкрементальные проверки через `updated_min`; если AI-приложение поддерживает задания по расписанию, оно может периодически проверять календарь.\n\n## Техническая документация\n\n- [Каталог MCP-возможностей](./docs/capabilities/index.md) — страницы по пользовательским задачам для каждого инструмента.\n- [Все инструменты и параметры](./docs/TOOLS.md)\n- [Документация по разработке](./docs/DEVELOPMENT.md)\n- [Документация по публикации](./docs/PUBLISHING.md)\n- [Справочник Google Calendar API](https://developers.google.com/calendar/api)\n\n## Поддержка\n\nНашли ошибку или не хватает сценария? [Создайте issue](https://github.com/A1-x-Tech/mcp-google-calendar/issues) или напишите в [Telegram](https://t.me/a1_mcp).\n\n<br>\n\n<p align=\"center\">\n  <img src=\"https://github.com/ztemerbekov/a1-yandex-kit-skills/raw/main/assets/images/mona-hifive-yandex-kit-warm.gif\" alt=\"Две Моны дают пять\" width=\"256\">\n</p>\n\n<p align=\"center\">\n  Вы дочитали до конца!\n</p>\n","readmeFilename":"README.ru.md"}