Skip to main content
Glama

gcal-mcp — Google Calendar для MCP-клиентов

Небольшой MCP-сервер (stdio, JSON-RPC) для работы с Google Calendar: читать события, создавать, переносить, красить. Работает с любым MCP-клиентом — DeepSeek Harness, Claude Code, Claude Desktop, Kimi Code CLI.

Что умеет

Инструмент

Что делает

list_calendars

список календарей аккаунта: id, название, права доступа

list_events

события за период, по возрастанию времени, с ID для правок

create_event

создать событие; без конца — ставит час

update_event

перенести, переименовать, поменять описание, место или цвет

delete_event

удалить по ID

Цвета — палитра Google, номера 1–11. Палитра и подсказки, как выбрать свою схему: ЦВЕТА.md. Схему сервер не навязывает: каким цветом что помечать — личное дело каждого.

Ограничений по календарям нет: можно работать и со своим основным, и с расшаренными (у них свои ID — их отдаёт list_calendars).

Related MCP server: @calendar-mcp/server

Требования

  • Node.js 20+

  • Свой проект в Google Cloud — обязателен. OAuth-клиент выдаётся приложению конкретного проекта, чужой не подойдёт.

Установка

git clone https://github.com/<ваш-аккаунт>/gcal-mcp.git
cd gcal-mcp
npm install

Дальше — доступ к календарю, один раз.

1. Google Cloud Console

  1. console.cloud.google.com → новый проект.

  2. APIs & Services → Library → включить Google Calendar API.

  3. OAuth consent screen (новый интерфейс — Google Auth Platform → Get started): App information → Audience: External → Contact information → Create.

  4. Audience → Test users → добавить свой Gmail. Без этого Google не пустит в приложение, пока оно в Testing.

  5. Publish app — по желанию. Без публикации refresh-токен живёт 7 дней, потом вход повторяется.

  6. Clients → Create client → Desktop app → скачать JSON.

Скачанный файл переименовать в credentials.json и положить рядом с server.mjs.

2. Авторизация

node oauth.mjs

Откроется браузер. Выбрать аккаунт → «Дополнительно» → «Перейти в … (небезопасно)» → «Разрешить». Рядом появится token.json; дальше обновляется сам.

Проверка: node server.mjs печатает [calendar-mcp] готов, инструментов: 5.

Подключение к клиентам

DeepSeek Harness — в ~/.dsh/profiles/desktop/cordis.patch.yml, затем перезапуск:

- id: mcp-gcal
  name: "@deepseek-ai/dsh-mcp-client"
  config:
    serverName: gcal
    transport: stdio
    command: node
    args:
      - "/абсолютный/путь/до/gcal-mcp/server.mjs"
    toolCallTimeoutMs: 90000
    failOnStartupError: false

Claude Code:

claude mcp add gcal -- node /абсолютный/путь/до/server.mjs

Claude Desktop, Kimi и прочие — JSON:

{
  "mcpServers": {
    "gcal": {
      "command": "node",
      "args": ["/абсолютный/путь/до/gcal-mcp/server.mjs"]
    }
  }
}

Авторизация общая: все клиенты читают один и тот же token.json, второй раз в браузере разрешать не нужно.

Обновление

cd gcal-mcp
git pull
npm install

Перезапустить клиент (в DSH — полностью приложение, не окно). token.json и credentials.json не трогаются: они в .gitignore и лежат рядом.

Диагностика

Симптом

Причина

Нет файла credentials.json

файл не скачан или лежит с другим именем

403: access_denied в браузере

адрес не добавлен в Test users

invalid_grant

токен отозван или истёк Testing-режим → node oauth.mjs заново

Google API 403

не включён Calendar API в проекте

Инструменты не появились

сервер не стартовал → запустить node server.mjs вручную, смотреть ошибку

Пустой ответ вместо событий

не тот calendarId → сначала list_calendars

Безопасность

  • token.json — полный доступ к календарю. Не публиковать, не пересылать, не коммитить (в .gitignore).

  • credentials.json без token.json бесполезен.

  • Сервер обращается только к accounts.google.com, oauth2.googleapis.com, www.googleapis.com. Никакой телеметрии.

  • Отозвать доступ: myaccount.google.com → Безопасность → Сторонние приложения.

Устройство

  • server.mjs — MCP-сервер: описания инструментов, обработчики, авторизация по требованию.

  • gcal.mjs — токены, обновление, обёртка над Google API.

  • authflow.mjs — вход в браузере: loopback-сервер на 127.0.0.1, обмен кода на токен.

  • oauth.mjs — ручной запуск того же входа.

  • Зависимость одна — официальный @modelcontextprotocol/sdk.

Лицензия

MIT.

Related MCP Connectors

Related MCP Servers