yandex-messenger-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| YANDEX_MESSENGER_MCP_LOG_LEVEL | No | Log level for the server (debug/info/warn/error). Logs go to stderr; stdout belongs to the MCP stdio transport. | info |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_chatsA | Список чатов с метаданными (последнее сообщение, флаг непрочитанных), отсортированный по свежести. Текст последнего сообщения по умолчанию НЕ отдаётся (только метаданные) - включите include_last_message_text, если он действительно нужен. |
| get_historyA | Страница сообщений конкретного чата с пагинацией по курсору. |
| get_messageA | Одно сообщение по chat_id + message_id (message_id = timestamp в микросекундах) ЛИБО по join-ссылке. Без загрузки истории. Возвращает обогащённое сообщение и детальные реакции/прочтения. |
| get_message_contextA | Окно сообщений вокруг метки: N сообщений до и N после указанного message_id (timestamp в микросекундах). |
| get_threadB | Сообщения треда как микро-чата. Адресуется либо готовым thread_id, либо парой chat + message_id родительского сообщения (деривация thread_id, «Обсудить»). Пустой тред (ещё не материализован) возвращается с empty:true - первое сообщение в него отправляется через send_message с этим thread_id как ChatId. |
| list_reactionsA | Полный список «кто и когда» по сообщению: реакции (сгруппированы по типу, actors_complete:true - ВСЕГДА полный список, в отличие от get_history/get_message_context/get_thread, где актёры реакций могут быть усечённым сиблингом агрегата) и прочтения. Стоит ДВА WS-вызова (UserReactions + UserReads/Mode:1, §17.12) - дороже сиблингов, зато без обрезки. |
| searchA | Поиск по сообщениям, пользователям и чатам через HTTP registry. Найденные сообщения приходят обогащёнными так же, как в read-инструментах: reads, mentions, reactions, thread, forwarded, from_me. У найденных людей рядом с guid отдаётся chat_id, которым их можно адресовать. |
| send_messageA | Отправка текстового сообщения в два шага: без confirm возвращает превью (draft) и НЕ отправляет; с confirm:true и confirm_token из превью отправляет. Отправка необратима, поэтому чат и текст на шаге confirm сверяются с подтверждёнными; расхождение отклоняется. |
| send_fileA | Отправка картинки или файла в два шага: без confirm возвращает превью (draft: имя/размер/тип/чат) и НЕ заливает байты; с confirm:true и confirm_token из превью заливает (3 шага §12.1) и отправляет. Отправка необратима, поэтому чат и файл на шаге confirm сверяются с подтверждёнными; расхождение отклоняется. Тип определяется по расширению (image или file); voice/gallery не отправляются (только чтение). После отправки сообщение читается обратно по file_id и вложение скачивается download_attachment. |
| set_reactionA | Ставит или снимает реакцию на сообщение ОДНИМ вызовом, без confirm (реверсибельно). type - целочисленный id реакции (артворк, НЕ emoji) из поля reactions прочитанного сообщения. Тип валидируется по карте ДО отправки: неизвестный отвергается на входе и на провод не уходит. remove:true снимает ранее поставленную реакцию тем же инструментом. |
| mark_readA | Отмечает чат прочитанным ОДНИМ вызовом, без confirm (безобидно). Без message_id отмечает прочитанным до самого свежего сообщения (тянет последнюю страницу истории). Семантика маркера (SeenMarker) подтверждена живьём: обнуляет непрочитанное (form_status: verified в выдаче). |
| pin_messageA | Закрепляет или открепляет сообщение ОДНИМ вызовом, без confirm (легко откатить). С message_id закрепляет это сообщение; без message_id открепляет. Семантика Pin.Timestamp подтверждена живьём (form_status: verified). |
| delete_messageA | Удаление своего сообщения в два шага: без confirm возвращает превью удаляемого (draft, автор/время/текст) и НЕ удаляет; с confirm:true и confirm_token из превью удаляет. Удаление необратимо, поэтому чат и message_id на шаге confirm сверяются с подтверждёнными; расхождение отклоняется. Удаление чужого сообщения отклоняет сервер. После удаления сообщение читается с deleted:true. |
| edit_messageA | Правка своего сообщения в два шага: без confirm возвращает превью «было -> станет» (draft) и НЕ правит; с confirm:true и confirm_token из превью правит. Правка необратима, поэтому чат, message_id, new_text и состав mentions на шаге confirm сверяются с подтверждёнными; расхождение отклоняется. Правку чужого сообщения отклоняет сервер. После правки сообщение читается с новым текстом и непустым LastEditTimestamp. |
| get_pollA | Читает опрос по chat + message_id (message_id = timestamp в микросекундах), без confirm. Возвращает вопрос (title), варианты (answers, с title/votes и, для не-анонимного опроса, voters - кто голосовал), лимит выбора (max_choices), мой выбор (my_choices), признак анонимности (is_anonymous), число проголосовавших (voted_count) и результаты (results). У анонимного опроса сервер скрывает список голосующих даже по явному запросу - voters_hidden:true, доступен только агрегат и свой выбор. Признак «это опрос» виден полем is_poll (в обычной выдаче сообщения - kind:poll). Если сообщение не опрос - статус not_a_poll. |
| vote_in_pollA | Голос в опросе в два шага (draft->confirm). Форма Vote{ChatId,Timestamp,Action:0,Choices} подтверждена живьём (2026-07-17, commit_status:1 FULLY_COMMITTED), включая смену выбора: повторная отправка ЗАМЕНЯЕТ голос, choices - ПОЛНЫЙ набор (несколько вариантов - все индексы в одном choices). Без confirm возвращает draft и НЕ голосует; с confirm:true и confirm_token голосует. Confirm сохранён, потому что сам факт голоса необратим (voted_count растёт, в не-анонимном опросе голосующий попадает в список голосовавших); отменить голос до нуля протоколом не подтверждено. Choices на шаге confirm сверяются с подтверждёнными. После голоса проверяйте myChoices через get_poll. |
| download_attachmentA | Скачивает вложение по file_id в папку загрузок (/root/.config/yandex-messenger-mcp/downloads) и возвращает локальный путь. |
| join_to_threadA | Подписка на тред по thread_id (§17.10). Это вступление в тред, не создание и не отправка. Легко откатывается leave_thread, поэтому confirm не требует. |
| leave_threadA | Выход из треда по thread_id (§17.10). Отписка; ничего не разрушает, confirm не требует. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
Each tool has a distinct operational purpose, and the descriptions carefully clarify boundaries (e.g. full reactions vs. embedded reaction summaries, history pagination vs. context window). However, the cluster of message-reading tools (get_history, get_message_context, get_thread, list_reactions) could still cause some misselection without close reading.
Most tools follow a clear verb_noun snake_case pattern: list_chats, send_message, delete_message, get_poll. Minor deviations like mark_read, vote_in_poll, and bare search break the strict pattern but are still predictable and readable.
At 19 tools, the server is above the typical sweet spot but not bloated: each tool addresses a concrete messaging capability (chat listing, history, threads, reactions, polls, file handling, moderation). The breadth is justified by the messenger domain, though a few read variants could arguably be consolidated.
Core messaging lifecycles are covered: send, read, edit, delete, react, pin, search, poll voting, and attachment download. Notable gaps like creating chats, creating polls, forwarding messages, and sending voice/gallery media exist, but they are workable gaps for an assistant operating on existing conversations.