Skip to main content
Glama
expremiental

telegram-mcp

by expremiental
README.md
# telegram-mcp (движок)

Read-only MCP-читалка своей Telegram (self-host, Telethon). Открытый движок — актив бренда [aiaiai](https://getaiaiai.ru). Session живёт на устройстве (keychain), наружу не уходит. v1 = читалка; write-методы не выставлены.

Дизайн и решения — в umbrella-репо `telegram-mcp-hosted` (`docs/decisions.md`, `architecture.md`, `build-plan.md`).

## Раскладка
```
telegram_mcp/
  server.py        # entrypoint: FastMCP + авто-дискавери tools/
  _app.py          # единый FastMCP-инстанс (mcp)
  config.py        # app-креды (BYO env/.env; broker позже)
  qr_render.py     # ASCII-QR полублоками (обкатан в спайке) ✅
  session_store.py # SessionStore: keychain+Fernet — интерфейс (impl = T2)
  client.py        # get_client() -> авторизованный TelegramClient — интерфейс (impl = T3)
  auth.py          # QR-login + 2FA — интерфейс (impl = T4)
  tools/
    _base.py       # mcp, get_client, общие хелперы — единая точка импорта
    *.py           # по тулу на файл, саморегистрация через @mcp.tool (стабы T5–T12)
```

## Контракт для авторов тулзов (Wave 1, T5–T12)
- Файл тула начинается с `from telegram_mcp.tools._base import mcp, get_client`.
- Регистрация — `@mcp.tool` (FastMCP берёт сигнатуру+докстринг в схему). Центрального списка НЕТ — добавил файл, тул появился (авто-дискавери).
- В Telegram — **только** через `await get_client()`.
- **read-only**: только `get_*`/`iter_*`/`download_*`. Ни одного write-вызова.
- Возвращай JSON-сериализуемое (dict/list), не объекты Telethon.
- Трогаешь **только свой файл**. Не редактируешь `pyproject`, `server.py`, `_base.py`, `_app.py` (нужна общая утилита/зависимость → флаг в интеграцию T16). Свой git worktree.

## Установка (self-host)
```bash
# 1. поставить как CLI (uv сам тянет нужный python ≥3.10)
uv tool install git+https://github.com/expremiental/telegram-mcp

# 2. залогиниться — отсканировать QR своим Telegram
#    (app-креды берутся с брокера автоматически, ничего на my.telegram.org создавать не надо)
telegram-mcp login

# 3. подключить в Claude Code / Cursor
claude mcp add -s user telegram-mcp -- telegram-mcp serve
```
Перезапусти хост → спрашивай обычным языком: «сделай дайджест непрочитанного», «найди чат с …», «что писали в … за сегодня».

- **read-only** — выставлены только read-тулзы; ничего не отправляет/не меняет.
- **session шифрованная в keychain, машину не покидает.** Сброс: `telegram-mcp logout`.
- BYO-креды (advanced): `TELEGRAM_API_ID`/`TELEGRAM_API_HASH` в окружении переопределяют брокер.

## Dev
```bash
uv venv --python 3.12 .venv && uv pip install -e . --python .venv
.venv/bin/telegram-mcp serve   # сервер (stdio)   ·   login / logout — онбординг
```
Требует Python ≥3.10 (FastMCP).

TDQS

A3.7/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a specific Telegram resource and action: account info, unread digest, media download, chat search, message history, chat list, participants, pinned messages, entity resolution, and in-chat search. Potential overlaps (e.g., find_chat vs resolve_chat) are differentiated by search vs exact match, and get_history vs search_in_chat by unfiltered retrieval vs text query.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (get_me, digest_unread, download_media, find_chat, get_history, list_chats, get_participants, get_pinned, resolve_chat, search_in_chat). The verbs are varied but appropriate to each action, and there are no style mixes or camelCase deviations.

Tool Count5/5

With 10 tools, the set is well-scoped for a Telegram read-only/digest MCP server. Each tool covers a distinct need without unnecessary redundancy, and the count is within the ideal 3-15 range.

Completeness4/5

The server covers the core read-only workflow: account info, listing chats, unread digests, history, search, media download, participants, pinned messages, and entity resolution. Minor gaps exist, such as no direct tool for getting a single message by ID or detailed user/chat profiles, but these are easily worked around with existing tools.

Maintenance

ActivityStale
ResponsivenessNo issues