Skip to main content
Glama
Toligrim

letopis-mcp

by Toligrim

📜 Летопись (Letopis)

Engine für das Archiv und die intelligente Suche in Telegram-Chat-Verläufen

Rohe Nachrichten in JSONL · Volltextsuche mit russischer Morphologie · Downloader mit Manager

Python 3.10+ Telethon SQLite FTS5 License


Idee

Летопись ist kein Bot und kein Dienst, sondern ein CLI-Werkzeug, das genau dafür gebaut ist, dass ein LLM-Agent (vor allem Claude Code) den Verlauf Ihrer Telegram-Chats lesen und daraus Fragen beantworten kann – wie aus einer normalen Wissensbasis.

Das Archiv wird als normale Dateien gespeichert – .jsonl, eine Datei pro Chat und Monat, append-only. Darüber wird ein SQLite-Index mit Volltextsuche (FTS5) aufgebaut, der russische Wortformen versteht: Die Abfrage „хостинг“ findet auch Nachrichten mit dem Wort „хостингами“. In die Suche fließen außerdem Sprachnachrichten-Transkripte, Dateinamen und der Text von Umfragen ein.

$ ./tg search переезд хостинг --chat devops --from 2025-06

Engine und Daten sind getrennt. Dieses Repository enthält nur den Code – die Chat-Archive selbst, config.toml, .env und die Telegram-Session liegen in einem separaten privaten Repository. Das behält die Kontrolle darüber, was öffentlich ist und was nicht. Details im Abschnitt „Struktur“.


Related MCP server: telegram-user-mcp

✨ Funktionen

🔎 Volltextsuche

SQLite FTS5 + pymorphy3: sucht nach Lemmata, nicht nur nach exakten Wörtern

📦 Archiv als Dateien

archive/<chat_id>/<YYYY-MM>.jsonl, append-only, nichts wird nachträglich umgeschrieben

⬇️ Downloader mit Manager

download / sync laden nur Neues herunter; manifest.json merkt sich, was verfolgt wird

🎙️ Sprachnachrichten-Transkription

lokal (faster-whisper), über Telegram Premium oder OpenAI Whisper API

🌐 We-Viewer

Chats → Themen-Chips, nllunendliches Scrollen, Filter, Sprachplayer, Sprünge zu Replies

⌨️ TUI-Viewer

dieselbe Funktion im Terminal (textual)

👥 Mehrere Konten

verschiedene Chats können mit verschiedenen Telegram-Konten heruntergewden

🤖 Auf Agenten abgestimmt

JSON-Ausgabe, kompakte Kurzformate, stabiler CLI-Vertrag


🚀 Schnellstart

git clone https://github.com/Toligrim/letopis.git
cd letopis
python3 -m venv .venv && .venv/bin/pip install -e .
.venv/bin/pip install faster-whisper   # опционально: локальная транскрипция голосовых

Летопись ist nur die Engine. Um einen konkreten Chatter anzuschließen, legen Sie ein eigenes Daten-Repository an und legen Sie dort den Wrapper ./tg ab:

#!/bin/sh
exec "$HOME/projects/letopis/.venv/bin/tg" "$@"

Danach läuft alles aus dem Wurzelverzeichnis des Daten-Repository:

chmod +x tg
./tg login              # авторизация Telegram-сессии (телефон / код / 2FA)
./tg download --chat mychat --media all
./tg index && ./tg meta
./tg search привет

Die Engine findet das Daten-Wurzelverzeichnis selbst: Beim Start sucht tg von dem aktuellen Verzeichnis aus nach oben einer Dokumentation, in der config.toml und archive/ seitlich liegen (oder das wird explicity über die Umgebungsvariable TG_ROOT gesetzt).

🤖 Read-only MCP für ChatGPT

Letopis kann als Read-only-MCP-Retrieval-Gateway für ChatGPT ausgeführt werden: Der Server verwendet die gleiche data/index.db wie die normale Search, stellt aber nur fünf sichere Retrieval-Werkzeuge bereit – Archivübersicht, Suche, Aggregates, Message-Auswahl und lokalen Context. Der MCP-Prozess synchronisiert Telegram nicht, lädt keine Dateien herunter und verändert den Index nicht.

Installation und Start

Install the MCP-SDK und die Test-Abhängigkeiten in die Umgebung der Engine:

.venv/bin/pip install -e ".[mcp,test]"

Start über den Entrypoint:

.venv/bin/letopis-mcp

Alternative Forme — .venv/bin/python -m tgarchive.mcp.server. Standardmäßig horcht der Server auf http://127.0.0.1:8765/mcp und akzeptiert nur Loopback-Adressen. Gast für den Produktion mit Betrieb, setzen Sie ein stabiles Cursor-Secretschloss secret und ihn den Index-Pfad in der Prozess-Umgebung an, z.B.:

export LETOPIS_MCP_DB=/srv/letopis-data/data/index.db
export LETOPIS_MCP_CURSOR_SECRET='случайный-длинный-секрет'
.venv/bin/letopis-mcp

Umgebungsvariablen

Umgebungsvariablen

Standard

Zweck

LETOPIS_MCP_DB

Wert von [general].db aus config.toml, in der Regel data/index.db

Pfad zum SQLite-Index; relative Pfade werden ab Projektstamm aufgelöst.

LETOPIS_MCP_CURSOR_SECRET

keine; kurzlebiges Zufallsgeheimnis pro Prozess

HMAC-SHA256 für sweat Cursor. In Produktion erforderlich: ohne Ihnn sticken die Cursor keinen Prozessstart.

LETOPIS_MCP_HOST

127.0.0.1

Loopback-Bind-Adresse; die Anwendung lehnt nichtlokale Adressen ab.

LETOPIS_MCP_PORT

8765

TCP-Port des Streamable-HTTP-Endpunkts.

LETOPIS_MCP_LOG_LEVEL

INFO

Stufe des strukturierten Logging (DEBUG, INFO, WARNING, ERROR, CRITICAL).

LETOPIS_MCP_MAX_CONCURRENCY

60

Maximale gleichzeitige Problemen auf der read-only DB.

LETOPIS_MCP_QUERY_TIMEOUT_SECONDS

30.0

Deadline für SQLite-Anfragen und Warten auf einen Concurrency-Slot.

LETOPIS_MCP_ROLLING_CALLS_MAX

60

Maximale angeforderte Aufrufe im globalen Rolling-Fenster.

LETOPIS_MCP_ROLLING_CHARS_MAX

250000

Maximale diejenigen Zeichen im selben Fenster.

LETOPIS_MCP_ROLLING_WINDOW_SECONDS

600

Länge des Rolling-Fenster in Sekunden.

Rate Limit ist absichtlich pro Prozess global gehalten: in v1 gibt es kein OAuth und keine identifizierten Principals – es ist also keine Per-User-ACL. Der MCP liest diese Variablen als Prozesskonfiguration und lädt .env nicht automatisch.

Anbindung an ChatGPT

Empfohlenes Schema veröffentlicht Letopis nicht direkt ins Internet:

ChatGPT ↔ OpenAI Secure MCP Tunnel ↔ tunnel-client на этом хосте
                                      ↔ 127.0.0.1:8765/mcp

Die konkreten Befehle und Schritte für den Secure MCP Tunnel hängen vom aktuellen OpenAI-Workspace und der aktuellen OpenAI-Dokumentation ab. Bitte zur Zeit der Verbindung deutlich ansehen; dieses Bildschirm erfindet keine unbekannte OAuth-/Tunnel-Befehl.

Sicherheit des Deployment

Der DHCP-Prozess braucht nur data/index.db und die SQLite-seitigen Neben-Dateien data/index.db-wal / data/index.db-shm. .env, telegram.session*, archive/, Medien bzw. Manifest dürfen nicht zugänglich sein. Führen Führen Sie den Server unter einem eigenen Unix-Benutzer mit minimalen Rechten aus; Synchronisierung und Indizierung laufen als separater Prozess mit bestimmten Schreibrechten.


🗂 Struktur

репозиторий с данными/
├── config.toml              # настройки: аккаунты, транскрипция, веб-порт
├── .env                     # api_id / api_hash Telegram
├── telegram.session         # сессия аккаунта (и доп. сессии из [accounts])
├── tg -> letopis/.venv/bin/tg   # обёртка-энтрипоинт
├── data/
│   └── index.db             # SQLite + FTS5 — производный, пересобирается
└── archive/
    ├── manifest.json        # какие чаты отслеживаем, каким аккаунтом, какие медиа качаем
    └── <chat_id>/
        ├── 2025-06.jsonl    # сырые сообщения этого месяца — источник истины
        ├── 2025-07.jsonl
        ├── transcripts.jsonl   # расшифровки голосовых/кружков
        ├── media_index.jsonl   # реестр скачанных файлов
        └── media/               # сами файлы
  • JSONL – Quelle der Wahrheit. Monatsdateien; sync appendets nur neue Nachrichten, bestehende Gewässer werden nie angefasst.

  • index.db – eine separate Ebene. Sie kann jederzeit gelöscht bearbeitet werden (./tg index --rebuild), ohne Datenverlust.

  • manifest.json – der Manager. Er lebensindexierte Neuaufbau; speichert, welcheChats/Topicstrackers werden und welche Medientypen für sie heruntergeladen werden.

Diese Trennung (Engine in Git, offen → Daten getrennt, privat) egal, es ermöglicht, den Code freely weiterzuentwickeln und zu teilen, ohne das Risiko eines Datenlecks in den Chatverläufen.


🧭 Befehle

Suchbefehle – das Wesentliche für Agenten

Befehl

Wirkung

tg search <слова…>

Volltextsuche. Flags: --umfragegnnis -, --undefined & Xxx, - Tre, --topic, --sender, y-Achsen: --from/--to, --extraslarge, z-- unknown --not-me N(Kontext um die Treffer),--count, --by-chat/--by-topic/--by-sender(Aggregat),--rank(nach Relevanz),--j@json,--kurzfristig --limit N|0`

tg dump --chat X [--topic N]

Chronologischer Ausschnitt des gesamtem Verlaufs

tg context --chat X --id N

Nachrichten um einen bestimmten Nachrichten („--before / --after / --whole-chat)?

tg chats

/web?path=` – ‚Überblick eine Teams’ ant"

tg topics --chat X

Themen eines Forum-Chats

tg status

Stellungnahme/Status von Archiv und Index.

Projekt-Liste – manuelle Betriebsart

Befehl

Was es tut

tg web

Lokale Weboberfläche: Chats → Themen-Chips, unendliches Scrollen, Suche mit Filtern, Sprung zum Datum, Filter nach Autor (Klick auf den Nickname), Foto/Video inline, Player für Sprachnachrichten mit Transkript, Replies mit Sprung in den Thread, t.me-Links. Port – in config.toml [web]

tg tui

Dasselbe im Terminal: / Suche · g Datum · s Autor · o/n älter/neuer · c Kontext · m in Telegram öffnen · f Datei öffnen · Esc zurück · q beenden

Downloader und Manager

Befehl

Was es tut

tg dialogs

Alle Chats des Kontos (✓ – bereits im Archiv)

tg download --chat <name|id|@user>

Chat/Topics herunterladen und auf Tracking setzen. Flags: --topic N, --from 2025-01, --media photo,voice|all|none

tg sync [--chat X]

Neue Nachrichten aller beobachteten Chats nachladen

tg media --chat X --media voice

Dateien für bereits heruntergeladene Nachrichten nachladen

tg transcribe [--provider …]

Sprachnachrichten in Text transkribieren, damit sie in die Suche aufgenommen werden

tg untrack --chat X

Chat aus der Beobachtung entfernen (Dateien bleiben auf der Festplatte)

tg meta / tg index

Chatnamen aktualisieren / Archiv nachindizieren

tg login [--account имя]

Telegram-Sitzung autorisieren (Telefon / Code / 2FA)

Ein Chat kann als id, als Alias aus config.toml, als Teilname, @username oder Link t.me/... angegeben werden. Neue Nachrichten werden mit allen Reaktionen, Umfragen und Service-Ereignissen heruntergeladen.


🎙 Transkription von Sprachnachrichten

Der Provider wird in config.toml [transcription] festgelegt:

Provider

Kosten

Voraussetzungen

whisper-local

kostenlos, lokal

faster-whisper, Modell small standardmäßig

telegram

kostenlos

Telegram Premium auf dem Konto

openai

kostenpflichtig (Whisper API)

OPENAI_API_KEY in .env


👥 Mehrere Konten

[accounts]
default = "telegram.session"
backup  = "sessions/backup.session"

tg login --account backup autorisiert eine neue Sitzung. download / sync / dialogs / meta haben jeweils das Flag --account. Jeder Titel im Manifest ist seinem Konto zugeordnet.


🗺Status

Phase

Status

Funktionsumfang

A

✅ fertig

Index, Suche, CLI, Integration mit Claude Code

B

✅ fertig

Downloader (download/sync, append-only), Medien nach Einstellungen, Backfill, Transkription, Manager (manifest.json), mehrere Konten, FloodWait-Schutz

C

✅ fertig

Abschluss: tg web (Browser, Medien) und tg tui (Terminal)

Als Nächstes: Auto-Sync nach Zeitplan, OCR von Bildern, Azure-Speech-Provider, Export von Auswahlen.


🔒 Sicherheit

telegram.session und .env geben vollen Zugriff auf das Telegram-Konto. Bewahren Sie sie in einem separaten privaten Repository mit den Daten auf; committen Sie sie nicht in dieses Repository und veröffentlichen Sie sie irgendwo.


Entwickelt, damit ein Agent die Unterhaltung besser merken kann als man selbst.

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that connects to Telegram as your real user account and exposes read-only tools to read and search messages, list chats and folders, inspect group info, and download media.
    9
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A local MCP server that enables full-text and semantic search over your own Telegram chats using your personal MTProto login, with everything running locally.
    7
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Read-only MCP server for Telegram chats and channels that provides digest summaries, message search, and action items.
    27
    MIT

View all related MCP servers

Related MCP Connectors

  • Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.

  • Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only

  • Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Toligrim/Letopis-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server