Telegram MCP Server

Extract Telegram chat history, including text, photos, and documents.

README.md

Telegram MCP Server

MCP-сервер для извлечения истории чатов Telegram, включая текстовые сообщения, фото и документы. Использует GramJS (MTProto userbot) для полного доступа к личным чатам.

Требования

Установка

npm install
cp .env.example .env
# Заполнить TELEGRAM_API_ID и TELEGRAM_API_HASH в .env

Первый запуск — аутентификация

npm run auth

Введи номер телефона → код из Telegram → пароль 2FA (если есть). Сессия сохранится в telegram.session.

Сборка и запуск

npm run build
npm start

Транспорты

Сервер поддерживает два режима работы, выбираемых переменной TRANSPORT:

Переменная Значение Описание
TRANSPORT=stdio по умолчанию Локальный запуск через stdin/stdout, авторизация не нужна (процесс изолирован)
TRANSPORT=http сетевой режим HTTP-сервер на порту PORT (по умолчанию 3000), требуется AUTH_TOKEN

stdio (по умолчанию)

Сервер общается с клиентом через stdin/stdout. Безопасность обеспечивается изоляцией процесса — доступ имеет только тот, кто его запустил.

HTTP с Bearer token авторизацией

Для сетевого доступа (например, сервер на удалённой машине). Каждый запрос должен содержать заголовок:

Authorization: Bearer <ваш_токен>

Без валидного токена сервер вернёт 401 Unauthorized.

Сгенерировать токен:

node -e "console.log(crypto.randomUUID())"

Настроить в .env:

TRANSPORT=http
PORT=3000
AUTH_TOKEN=ваш-секретный-токен

Подключение к Claude Code / Claude Desktop

Claude Code — stdio (локально)

claude mcp add telegram-mcp -- node /path/to/telegram-mcp-server/dist/index.js

Claude Code — HTTP (удалённый сервер)

claude mcp add telegram-mcp \
  --transport http \
  --url http://your-server:3000/mcp \
  --header "Authorization: Bearer ваш-секретный-токен"

Claude Desktop (config)

{
  "mcpServers": {
    "telegram": {
      "command": "node",
      "args": ["/path/to/telegram-mcp-server/dist/index.js"],
      "env": {
        "TELEGRAM_API_ID": "your_id",
        "TELEGRAM_API_HASH": "your_hash",
        "TELEGRAM_SESSION_PATH": "/path/to/telegram.session",
        "DATA_DIR": "/path/to/data"
      }
    }
  }
}

Docker

Сборка

docker build -t telegram-mcp .

Запуск — stdio

docker run --rm -i \
  -e TELEGRAM_API_ID=12345 \
  -e TELEGRAM_API_HASH=abc123 \
  -v ./telegram.session:/app/telegram.session \
  -v ./data:/app/data \
  telegram-mcp

Запуск — HTTP с авторизацией

docker run -d \
  -e TRANSPORT=http \
  -e AUTH_TOKEN=ваш-секретный-токен \
  -e TELEGRAM_API_ID=12345 \
  -e TELEGRAM_API_HASH=abc123 \
  -v ./telegram.session:/app/telegram.session \
  -v ./data:/app/data \
  -p 3000:3000 \
  telegram-mcp

Инструменты (Tools)

Tool Описание
telegram_list_chats Список всех чатов
telegram_find_chat Поиск чата по имени/username/ID
telegram_get_history Получить сообщения (без скачивания медиа)
telegram_sync_chat Основной — полная синхронизация чата с медиа
telegram_download_media Скачать медиа из конкретного сообщения
telegram_sync_status Статус последней синхронизации
telegram_list_media Список скачанных медиафайлов

Типичный workflow

1. telegram_find_chat("Мама")           → получаем chat_id
2. telegram_sync_chat(chat_id)          → скачиваем всё
3. telegram_list_media(chat_id, "photo") → список фотографий
4. Загружаем файлы из data/raw/{chat_id}/media/ в Claude для анализа

Через 2 недели:

telegram_sync_chat(chat_id)  → скачает только новые сообщения

Структура данных

data/
└── raw/
    └── {chat_id}/
        ├── messages.json      # все сообщения
        ├── media_index.json   # индекс медиафайлов
        ├── sync_state.json    # состояние синхронизации
        └── media/             # скачанные файлы
            ├── photo_123.jpg
            ├── doc_456.pdf
            └── ...

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

  • Сессия Telegram хранится в файле (добавлен в .gitignore)
  • API credentials в .env (добавлен в .gitignore)
  • HTTP транспорт защищён Bearer token авторизацией
  • Данные хранятся только локально

Tools 7

telegram_list_chatsList all available Telegram chats.
telegram_find_chatSearch for a chat by name, username, or ID.
telegram_get_historyRetrieve messages from a chat without downloading media.
telegram_sync_chatPerform a full synchronization of a chat including media files.
telegram_download_mediaDownload media files from a specific message.
telegram_sync_statusCheck the status of the last synchronization.
telegram_list_mediaList all downloaded media files for a chat.

Environment Variables

TELEGRAM_API_IDrequiredAPI ID from my.telegram.org
TELEGRAM_API_HASHrequiredAPI Hash from my.telegram.org
TRANSPORTCommunication mode: stdio or http
AUTH_TOKENBearer token for HTTP transport mode

Try it

Find the chat ID for my conversation with 'John Doe'.
Sync all messages and media from my 'Work' group chat.
List all photos downloaded from the 'Family' chat.
Check the sync status of my recent Telegram conversations.

Frequently Asked Questions

What are the key features of Telegram MCP Server?

Full access to personal Telegram chat history via MTProto. Supports text, photo, and document extraction. Incremental synchronization to fetch only new messages. Local data storage with structured JSON indexing. Flexible transport options including stdio and authenticated HTTP.

What can I use Telegram MCP Server for?

Archiving important Telegram conversations for long-term storage. Analyzing chat history and media content using Claude. Automating the retrieval of documents shared in Telegram groups. Maintaining a local, searchable backup of Telegram messages.

How do I install Telegram MCP Server?

Install Telegram MCP Server by running: npm install && cp .env.example .env

What MCP clients work with Telegram MCP Server?

Telegram MCP Server works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep Telegram MCP Server docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Open Conare