Skip to main content
Glama
time-messenger-mcp-server

time-messenger-mcp-server

by BarredEwe

💬 Time Messenger MCP Server

Подключите корпоративный мессенджер Time от Т-Банка к Claude, OpenCode и другим AI-ассистентам

npm version CI Node.js MCP License: MIT

Быстрый старт · Настройка · Клиенты · Инструменты · Проблемы · Разработка


Time построен на Mattermost. Этот MCP-сервер даёт ассистенту доступ к вашему аккаунту: он читает и отправляет сообщения, разбирает треды, ищет каналы и людей, показывает непрочитанное.

Попросите, например: «Что важного было в моих каналах за утро?» · «Найди тред про релиз и кратко перескажи» · «Ответь в треде, что я посмотрю после обеда»

✨ Возможности

📨 Сообщения

чтение каналов и тредов, поиск, отправка и ответы в треде

🧵 Треды

отслеживаемые треды, статистика непрочитанного, follow / unfollow

📢 Каналы

список, поиск, непрочитанное, массовая отметка «прочитано»

👥 Команды и люди

команды, непрочитанное по командам, поиск пользователей

🔐 Авторизация

Personal Access Token или логин и пароль, поддержка MFA

Related MCP server: mattermost-mcp

🚀 Быстрый старт

Нужен Node.js 20.19+ и Personal Access Token (как получить).

Claude Code — одной командой:

claude mcp add time \
  -e TIME_URL=https://your-instance.time-messenger.ru \
  -e TIME_TOKEN=your_token_here \
  -- npx -y time-messenger-mcp-server

Для других клиентов — готовые конфиги в разделе Подключение к AI-клиентам.

Глобально через npm

npm install -g time-messenger-mcp-server
time-messenger-mcp-server

Из исходников

git clone https://github.com/BarredEwe/time-messenger-mcp-server.git
cd time-messenger-mcp-server
npm install
npm run build
node dist/index.js

⚙️ Настройка

Переменные окружения

Переменная

Обязательна

Описание

TIME_URL

✅

Адрес вашего Time, например https://your-instance.time-messenger.ru

TIME_TOKEN

✅ *

Personal Access Token

TIME_LOGIN_ID

✅ *

Email или логин

TIME_PASSWORD

✅ *

Пароль, указывается вместе с TIME_LOGIN_ID

TIME_REQUEST_TIMEOUT_MS

—

Таймаут запроса к API в мс, по умолчанию 30000

TIME_USER_AGENT

—

Свой User-Agent, если ваш сервер отбрасывает запросы с небраузерным

* Нужен либо TIME_TOKEN, либо пара TIME_LOGIN_ID + TIME_PASSWORD. Шаблон со всеми переменными — .env.example.

Способы авторизации

Personal Access Token (рекомендуется)

Постоянный токен, который не истекает.

  1. Откройте Time в браузере.

  2. Аватарка → Настройки аккаунта → Безопасность → Персональные токены доступа.

  3. Создайте токен, например с описанием MCP Server.

  4. Скопируйте его сразу: токен показывается один раз.

Логин и пароль

Сервер сам получит токен сессии и сохранит его в ~/.time-mcp/auth.json, чтобы не входить заново при каждом запуске. Когда сессия истечёт, сервер снова войдёт по логину и паролю.

Если на аккаунте включена двухфакторная аутентификация:

  1. Первый запрос вернёт ошибку MFA verification required.

  2. Попросите ассистента вызвать login_with_mfa с 6-значным кодом из приложения-аутентификатора.

  3. Токен сохранится, и код понадобится снова только после истечения сессии.

OAuth2

Не подходит для MCP: требует редиректа в браузере. Если нужен OAuth2 в собственном веб-приложении, смотрите документацию Time.

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

Сервер работает через stdio — стандартный транспорт MCP, поэтому подойдёт любой совместимый клиент.

Файл конфигурации:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "time": {
      "command": "npx",
      "args": ["-y", "time-messenger-mcp-server"],
      "env": {
        "TIME_URL": "https://your-instance.time-messenger.ru",
        "TIME_TOKEN": "your_token_here"
      }
    }
  }
}

Для входа по логину замените TIME_TOKEN на TIME_LOGIN_ID и TIME_PASSWORD. После правки перезапустите Claude Desktop.

claude mcp add time \
  -e TIME_URL=https://your-instance.time-messenger.ru \
  -e TIME_TOKEN=your_token_here \
  -- npx -y time-messenger-mcp-server

Файл ~/.config/opencode/opencode.json:

{
  "mcp": {
    "time": {
      "type": "local",
      "command": ["npx", "-y", "time-messenger-mcp-server"],
      "enabled": true,
      "environment": {
        "TIME_URL": "https://your-instance.time-messenger.ru",
        "TIME_TOKEN": "your_token_here"
      }
    }
  }
}

Укажите команду npx -y time-messenger-mcp-server и передайте переменные окружения из таблицы выше.

🧰 Инструменты

33 инструмента в восьми группах.

📨 Сообщения

Инструмент

Что делает

send_message

Отправляет сообщение в канал или отвечает в треде

get_channel_messages

Возвращает сообщения канала с пагинацией

get_thread_messages

Возвращает все сообщения треда

search_messages

Ищет сообщения в команде

😀 Реакции

Инструмент

Что делает

add_reaction

Ставит эмодзи-реакцию на сообщение

remove_reaction

Убирает свою реакцию с сообщения

get_reactions

Список реакций на сообщении

emoji_name принимает каноническое имя (+1, 100), запись с двоеточиями (:tada:), распространённый алиас (thumbsup) или сам символ (👍). Алиасы и символы приводятся к каноническому имени, иначе реакция встанет отдельно от той, что ставит нативный клиент.

🧵 Треды

Инструмент

Что делает

list_threads

Список отслеживаемых тредов в команде

get_thread_stats

Статистика непрочитанных тредов

get_thread

Информация о треде

follow_thread

Начинает отслеживать тред

unfollow_thread

Перестаёт отслеживать тред

mark_thread_read

Отмечает тред прочитанным

📢 Каналы

Инструмент

Что делает

list_channels

Список каналов в команде

get_channel

Информация о канале

search_channels

Ищет каналы

get_channel_unread

Непрочитанное в канале

mark_channels_read

⚠️ Отмечает каналы прочитанными, без отмены (подробнее)

🗂 Категории каналов

Инструмент

Что делает

list_channel_categories

Категории сайдбара в порядке отображения, с каналами

create_channel_category

Создаёт пустую пользовательскую категорию

update_channel_category

Меняет сортировку, mute или свёрнутость; переименовать можно только пользовательскую

delete_channel_category

Удаляет пользовательскую категорию, каналы возвращаются в стандартные

reorder_channel_categories

Задаёт порядок категорий, нужно перечислить все

move_channel_to_category

Переносит канал в пользовательскую категорию, «Каналы» или «Избранное»

set_channel_favorite

Добавляет в избранное или убирает; личные сообщения возвращаются в «Личные сообщения»

👥 Команды

Инструмент

Что делает

list_teams

Команды пользователя

get_team

Информация о команде

get_teams_unread

Непрочитанное во всех командах

get_team_unread

Непрочитанное в одной команде

👤 Пользователи

Инструмент

Что делает

get_me

Текущий пользователь

get_user

Пользователь по ID

search_users

Ищет пользователей

🔐 Авторизация

Инструмент

Что делает

login_with_mfa

Завершает вход кодом двухфакторной аутентификации

  • mode: "all" — все доступные каналы: публичные, приватные, личные и групповые.

  • mode: "selected" — только каналы из переданного непустого списка ID.

  • Для каждого уникального канала уходит отдельный запрос Time /view. Временные сбои повторяются, а оставшиеся ошибки перечисляются в ответе.

  • Отслеживаемые треды не затрагиваются, для них есть mark_thread_read.

🩺 Если что-то не работает

Сообщение

Что сделать

TIME_URL environment variable is required

Добавьте TIME_URL в env конфига клиента

Authentication required: set TIME_TOKEN ...

Укажите TIME_TOKEN или пару TIME_LOGIN_ID + TIME_PASSWORD

MFA verification required

Вызовите login_with_mfa с кодом из аутентификатора (подробнее)

Login failed: 401 ...

Проверьте логин и пароль или перейдите на Personal Access Token

Работает от имени не того аккаунта

Удалите ~/.time-mcp/auth.json и перезапустите клиент

Запросы висят или обрываются

Увеличьте TIME_REQUEST_TIMEOUT_MS; если сервер режет небраузерные клиенты, задайте TIME_USER_AGENT

🛠 Разработка

npm install          # зависимости
npm run dev          # запуск из исходников через tsx
npm run build        # сборка в dist/
npm test             # тесты (vitest)
npm run typecheck    # проверка типов
src/
├── index.ts              # MCP-сервер и регистрация инструментов
├── client/
│   ├── time-client.ts    # клиент Time API
│   └── auth-store.ts     # токен сессии в ~/.time-mcp/auth.json
├── tools/
│   ├── auth.ts           # MFA
│   ├── messages.ts       # сообщения
│   ├── reactions.ts      # эмодзи-реакции
│   ├── threads.ts        # треды
│   ├── channels.ts       # каналы
│   ├── channel-categories.ts # категории каналов
│   ├── teams.ts          # команды
│   ├── users.ts          # пользователи
│   └── types.ts          # общие типы инструментов
├── types/
│   └── time-api.ts       # типы ответов Time API
└── __tests__/            # тесты vitest

Документация Time API

📄 Лицензия

MIT

Available Tools

33 tools
add_reactionB

Add an emoji reaction to a message. Accepts an emoji name ("+1", ":tada:") or a common emoji character ("👍")

Inputs: post_id (required), emoji_name (required).

create_channel_categoryC

Create an empty custom channel sidebar category.

Inputs: team_id (required), display_name (required).

delete_channel_categoryA

Delete a custom channel sidebar category. Its channels return to the default categories.

Inputs: team_id (required), category_id (required).

follow_threadA

Start following a thread to receive notifications

Inputs: thread_id (required).

get_channelC

Get information about a specific channel

Inputs: channel_id (required).

get_channel_messagesB

Get messages from a channel with pagination

Inputs: channel_id (required), page, per_page.

get_channel_unreadA

Get unread message count and mentions for a channel

Inputs: channel_id (required).

get_meB

Get information about the current user

Inputs: no named parameters.

get_reactionsA

List all emoji reactions on a message

Inputs: post_id (required).

get_teamC

Get information about a specific team

Inputs: team_id (required).

get_teams_unreadA

Get unread message counts for all teams

Inputs: no named parameters.

get_team_unreadA

Get unread message count for a specific team

Inputs: team_id (required).

get_threadC

Get information about a specific thread

Inputs: team_id (required), thread_id (required).

get_thread_messagesB

Get all messages in a thread

Inputs: post_id (required).

get_thread_statsB

Get unread threads count and mentions for a team

Inputs: team_id (required).

get_userB

Get information about a specific user

Inputs: user_id (required).

list_channel_categoriesB

List the user's channel sidebar categories for a team, in sidebar order, with their channels.

Inputs: team_id (required).

list_channelsA

List all channels for the user in a team

Inputs: team_id (required).

list_teamsA

List all teams for the current user

Inputs: no named parameters.

list_threadsB

List all threads that the user is following in a team

Inputs: team_id (required).

login_with_mfaA

Login to Time Messenger with MFA code. Use this when regular login requires MFA verification. Enter the 6-digit code from your authenticator app.

Inputs: mfa_code (required).

mark_channels_readA

Mark all available channels or selected channel IDs as read; this action cannot be undone. The all mode includes public, private, DM, and group channels. Followed threads are excluded; use mark_thread_read for threads.

Inputs: mode (required), channel_ids.

mark_thread_readB

Mark a thread as read up to a specific timestamp

Inputs: team_id (required), thread_id (required), timestamp.

move_channel_to_categoryB

Move one channel into an existing custom, Channels or Favorites sidebar category.

Inputs: team_id (required), channel_id (required), category_id (required).

remove_reactionB

Remove your own emoji reaction from a message

Inputs: post_id (required), emoji_name (required).

reorder_channel_categoriesB

Set the sidebar order of channel categories. category_ids must list every category of the team exactly once.

Inputs: team_id (required), category_ids (required).

search_channelsA

Search channels in a team by name

Inputs: term (required), team_id (required).

search_messagesB

Search messages in a team

Inputs: terms (required), team_id (required).

search_usersA

Search users by username, email, or name

Inputs: term (required).

send_messageA

Send a message to a channel or reply in a thread

Inputs: message (required), channel_id (required), root_id.

set_channel_favoriteA

Favorite or unfavorite one channel. Unfavoriting returns a channel to Channels, or a direct/group message to Direct Messages.

Inputs: team_id (required), favorite (required), channel_id (required).

unfollow_threadB

Stop following a thread

Inputs: thread_id (required).

update_channel_categoryA

Update metadata of a channel sidebar category. Provide at least one of display_name, sorting, muted, collapsed. Only custom categories can be renamed; managed categories cannot be changed.

Inputs: team_id (required), category_id (required), muted, sorting, +2 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 33 tools

    Disambiguation4/5

    Most tools map cleanly to a distinct resource and action, and the descriptions help separate similar operations. The unread/stats cluster (get_teams_unread, get_team_unread, get_thread_stats, get_channel_unread) is closely named and could cause hesitation, but the tools remain functionally separable.

    Naming Consistency4/5

    The set uses snake_case with a mostly predictable verb_noun pattern throughout. Minor deviations such as get_me and login_with_mfa, plus the singular/plural split between get_team_unread and get_teams_unread, keep it from being fully consistent.

    Tool Count2/5

    At 33 tools, the server is well above the borderline 16-25 range and feels heavy for a messenger interface. The breadth of subdomains explains some of the count, but the set still contains enough tools that it should likely be scoped down or more tightly grouped.

    Completeness3/5

    Coverage is broad across auth, users, teams, channels, messages, threads, reactions, and sidebar categories. However, core lifecycle operations such as creating/updating/deleting channels and editing/deleting messages are missing, which are notable gaps for a messenger server.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      A
      quality
      D
      maintenance
      An MCP server for MAX Messenger (Russia's national messenger by VK) that enables AI clients to send and read messages, manage chats and members, send media, and more through 21 tools.
      21
      80 npm
      12
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for Microsoft Teams that lets AI assistants search, message, and manage chats, meetings, files, and contacts using your existing Teams browser login—no app approval or Azure AD registration needed.
      1,506 npm
      3
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      MCP server for the eXpress corporate messenger, enabling AI agents to list chats, search contacts, send messages, and wait for incoming messages with end-to-end encryption.
      569 npm
      1
      MIT