← Все проекты

MCP-сервер для Telegram на Rust

MCP-сервер на Rust даёт AI‑агенту точный контекст Telegram и управляемые вложения без выгрузки аккаунта. Ответ готовится для одного адресата и отправляется только после отдельного личного согласования; результат сохраняется после перезапуска.

Демо и код
Что получает агент

AI выбирает один диалог и сообщение, затем читает ограниченный фрагмент вокруг него вместо выгрузки всего аккаунта.

Что остаётся в рабочей папке

Исходный файл скачивается в адресуемую по содержимому рабочую папку. Изменённая версия создаётся рядом и не перезаписывает оригинал.

Что нужно для ответа

Перед отправкой сервер связывает аккаунт, адресата, ответ на сообщение, текст, хеш материала и срок действия с одной личной карточкой согласования. Результат сохраняется.

Публичное демо и исходный код

v0.2.0 — текущая предварительная публичная версия. Демо запускает собранный MCP-сервер по stdio без Telegram-аккаунта, сети и реальной доставки.

  1. 16 инструментовУ каждого инструмента есть схемы входа и выхода, MCP-аннотации и единый структурированный результат после разбора аргументов.
  2. Собранный сервер по stdioИнтеграционный тест запускает собранный сервер и подключает rmcp-клиент через системные потоки ввода-вывода.
  3. Идентичность файлаДемо находит сообщение с договором, скачивает PDF, создаёт изменённую копию, отвечает файлом с привязанным SHA-256 и перечитывает результат.
  4. Состояние после рестартаПодготовленный текст, согласование, Telegram random_id и результат отправки остаются доступны после перезапуска.
01

Полная задача

AI‑агент через MCP может найти переписку, восстановить точный контекст сообщения, перенести вложение в контролируемую локальную папку и подготовить ответ без выгрузки всего аккаунта.

Сам сервер не содержит AI‑агента. Рассуждение и изменение файлов происходят в хосте; сервер на Rust отвечает за точный аккаунт, чат и сообщение, границы чтения, состояние согласования и результат отправки.

02

Что действительно запускает публичное демо

AI-ХОСТ
  найти сообщение | прочитать контекст
          ↓
TELEGRAM MCP (Rust через stdio)
  скачать неизменяемый PDF | вернуть путь + SHA-256
          ↓
УПРАВЛЯЕМАЯ ПАПКА
  хост создаёт изменённую копию
          ↓
ПОДГОТОВЛЕННЫЙ ОТВЕТ
  точный адресат | ID сообщения | хеш материала
          ↓
ОТПРАВКА + РЕЗУЛЬТАТ
  сохранённое состояние | ID сообщения в Telegram
03

Что доступно через сервер

16 типизированных операций
MCP-инструменты
ограниченный поиск и контекст
Сообщения
неизменяемые оригиналы + SHA-256
Вложения
личная кнопка в Telegram
Согласование текста
сохраняемый журнал SQLite
Восстановление отправки
стабильный MCP 2025-11-25
Протокол
04

Почему согласование хранится как состояние

Проблема
Процесс может остановиться после того, как Telegram принял сообщение, но до записи результата. Скопированная или устаревшая кнопка не должна становиться новым разрешением на отправку.
Решение
Сохраняются подготовленный материал, стабильный Telegram random_id, точная карточка согласования, ID нажавшего пользователя, срок действия и результат Telegram с ID отправленного сообщения. После сбоя продолжается та же операция, а не создаётся новая.
Почему не этот вариант
После сетевого сбоя прямая отправка не различает два случая: сообщение не ушло или ушло, но ответ потерялся. Повтор может создать дубль.
05

Почему чат и файл задаются точно

  • Повторно используемые ссылки на чаты: Возвращённый адрес можно снова передать серверу как username или канонический числовой ID; приватный диалог не угадывается по подписи интерфейса.
  • Управляемые папки: Загружаемый файл должен находиться внутри папки выбранного аккаунта, поэтому произвольный путь на машине нельзя отправить через Telegram.
  • Неизменяемые оригиналы: Скачанные файлы адресуются по содержимому. Изменение создаёт соседний файл с новым хешем, а не молча перезаписывает исходник.
  • Один владелец сессии: Telegram-сессией и обработчиком согласований одновременно владеет только один процесс.
06

Реализация

Ядро
Rust 2024, Tokio, clap
MCP
rmcp 1.7.0, stdio, serde, schemars
Telegram
ferogram, MTProto, согласование через Bot API
Состояние
журнал SQLite, адресуемый по содержимому кеш вложений