Skip to main content
Glama
Toligrim

letopis-mcp

by Toligrim

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

Motor de archivado y búsqueda inteligente para el historial de los chats de Telegram

Mensajes en crudo en JSONL · búsqueda de texto completo con morfología rusa · descargador con gestor

Python 3.10+ Telethon SQLite FTS5 License


Idea

Letopis no es un bot ni un servicio, sino una herramienta CLI pensada para que un agente LLM (principalmente Claude Code) pueda leer el historial de tus chats de Telegram y responder preguntas a partir de él, como si fuera una base de conocimientos cualquiera.

El archivo se almacena como archivos normales — .jsonl, uno por chat y mes, append-only. Sobre ellos se construye un índice SQLite con búsqueda de texto completo (FTS5), que entiende las formas de las palabras rusas: la consulta «хостинг» encuentra mensajes con la palabra «хостингами». A la búsqueda también están conectadas las transcripciones de voz, los nombres de archivo y el texto de las encuestas.

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

El motor y los datos están separados. Este repositorio contiene solo el código: los propios archivos de los chats, config.toml, .env y la sesión de Telegram viven en un repositorio privado separado, lo que te permite mantener el control sobre lo que es público y lo que no. Más información en «Estructura».


Related MCP server: telegram-user-mcp

✨ Funcionalidades

🔎 Búsqueda de texto completo

SQLite FTS5 + pymorphy3: busca por lemas, no solo por palabras exactas

📦 Archivo como archivos

archive/<chat_id>/<YYYY-MM>.jsonl, append-only, no reescribe nada retroactivamente

⬇️ Descargador con gestor

download / sync descargan solo lo nuevo; manifest.json recuerda lo que se sigue

🎙️ Transcripción de voz

local (faster-whisper), a través de Telegram Premium o OpenAI Whisper API

🌐 Visor web

chats → temas con chips, scroll infinito, filtros, reproductor de voz, saltos a respuestas

⌨️ Visor TUI

la misma funcionalidad en la terminal (textual)

👥 Varias cuentas

chats distintos se pueden descargar con cuentas de Telegram distintas

🤖 Pensado para agentes

salida JSON, formatos cortos y compactos, contrato CLI estable


🚀 Inicio rápido

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   # опционально: локальная транскрипция голосовых

Letopis es solo el motor. Para conectarlo a un archivo concreto, crea un repositorio de datos separado y coloca allí la envoltura ./tg:

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

A partir de ahí, todo se ejecuta desde la raíz del repositorio con los datos:

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

El motor encuentra solo la raíz de datos: al lanzar ./tg, busca desde el directorio actual hacia arriba una carpeta donde estén config.toml y archive/ (o se le indica explícitamente con la variable de entorno TG_ROOT).


🚀 MCP de solo lectura para ChatGPT

Letopis puede funcionar como un read-only MCP retrieval gateway para ChatGPT: el servidor usa el mismo data/index.db que la búsqueda normal, pero solo expone cinco herramientas seguras de recuperación: vista general del archivo, búsqueda, agregados, recuperación de mensajes y contexto local. El proceso MCP no sincroniza Telegram, no descarga archivos ni modifica el índice.

Instalación y ejecución

Instala el SDK de MCP y las dependencias de prueba en el entorno del motor:

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

Ejecución a través de entrypoint:

.venv/bin/letopis-mcp

Forma alternativa: .venv/bin/python -m tgarchive.mcp.server. Por defecto, el servidor escucha en `http://127.0.0.1:8765/mcp» and persists only loopback addresses. Para producción, establece un secreto de cursores estable y la ruta al índice en el entorno del proceso, por ejemplo:

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

Variables de entorno

Variable

Por defecto

Propósito

LETOPIS_MCP_DB

el valor de [general].db en config.toml, normalmente data/index.db

Ruta al índice SQLite; la ruta relativa se calcula desde la raíz del proyecto.

LETOPIS_MCP_CURSOR_SECRET

no definido; secreto temporal y aleatorio para el proceso

HMAC-SHA256 para cursores opacos. Obligatorio en producción: sin él, los cursores no sobreviven al reinicTIO del proceso.

LETOPIS_MCP_HOST

127.0.0.1

Dirección loopback de bind; la aplicación rechaza direcciones no locales.

LETOPIS_MCP_PORT

8765

Puerto TCP del endpoint HTTP Streamable.

LETOPIS_MCP_LOG_LEVEL

INFO

Nivel de logs estructurados (DEBUG, INFO, WARNING, ERROR, CRITICAL).

LETOPIS_MCP_MAX_CONCURRENCY

8

Máximo de operaciones concurrentes con la base de solo lectura.

LETOPIS_MCP_QUERY_TIMEOUT_SECONDS

30.0

Tiempo límite para la consulta SQLite y para esperar un slot de concurrencia.

LETOPIS_MCP_ROLLING_CALLS_MAX

60

Máximo de llamadas terminadas en la ventana móvil global.

LETOPIS_MCP_ROLLING_CHARS_MAX

250000

Máximo de caracteres devueltos en la misma ventana.

LETOPIS_MCP_ROLLING_WINDOW_SECONDS

600

Longitud de la ventana móvil en segundos.

Rate limit se aplica a propósito de forma global en cada proceso: en v1 no hay OAuth ni principals identificator, por lo que no es un ACL por usuario. MCP lee estas variables como configuración del proceso y no carga automáticamente .env.

conexión a ChatGPT

El esquema recomendado no publica Letopis directamente a Internet:

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

Los comandos concretos y los pasos de configuración de Secure MCP Tunnel depends on workspace actual de OpenAI and actual documentation de OpenAI. Consúltalos al momento de realizar la conexión; este repositorio no inventa ningún comando OAuth/tunnel sin verificar.

Seguridad del despliegue

El proceso MCP solo necesita data/index.db y los correspondientes sidecar de SQLite data/index.db-wal / data/index.db-shm. No debe tener acceso a .env, telegram.session*, archive/, de los archivos multimedia o del manifest. Ejecuta el servidor con un usuario Unix separado y con el mínimo de privilegios; la sincronización y la indexación deben hacerlo por separado con вклюros los permisos de escritura necesarios.


🗂 Estructura

репозиторий с данными/
├── 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 es la fuente de verdad. Archivos por mes, sync solo añade mensajes nuevos y nunca toca los antiguos.

  • index.db: capa derivada. Se puede eliminar y reconstruir (./tg index --rebuild) en cualquier momento sin perder datos.

  • manifest.json: administrador. Sobrevive a losac sua de índice; sabe qué chats/temas se están siguiendo y qué tipos de medios de ahí se deseen download.

Esta separación (motor en git, abierto; los datos aparte y privados) allows develop to develop and share code without risk leak filters.


🧭 Comandos

Búsqueda: lo indispensable para el agente

Comando

Qué hace

tg search <слова…>

Búsqueda de texto completo. Banderas: --any (OR en lugar de AND), --chat, --topic, --sender, --from / --to, --media, --around N (contexto alrededor de los resultados), --count, --by-chat / --by-topic / --by-sender (agregaddos), --rank (relevance), --json, --short N, --limit N|0

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

Suggest completa chronologically de la conversación completa

in

tg context --chat X --id N

Messages around the specific message (--before / --after / --whole-chat)

tg chats

Variable نوع. Ventana CRIT. Ver chats list archivo.

tg topics --chat X

list of topics of a forum chat.

tg status

variable date of archivo and index.

Visores — modo manual

Comando

Qué hace

tg web

Interfaz web local: chats → chips de temas, desplazamiento infinito, búsqueda con filtros, salto a una fecha, filtro por autor (clic en el nick), fotos/vídeo en línea, reproductor de notas de voz con transcripción, respuestas con salto al hilo, enlaces t.me. Puerto — en config.toml [web]

tg tui

Lo mismo en la terminal: / búsqueda · g fecha · s autor · o/n más antiguo/más nuevo · c contexto · m abrir en Telegram · f abrir archivo · Esc atrás · q salir

Descargador y gestor

Comando

Qué hace

tg dialogs

Todos los chats de la cuenta (✓ — ya en el archivo)

tg download --chat <имя|id|@user>

Descargar chat/temas y dejar en seguimiento. Opciones: --topic N, --from 2025-01, --media photo,voice|all|none

tg sync [--chat X]

Descargar mensajes nuevos de todos los chats en seguimiento

tg media --chat X --media voice

Descargar archivos para los mensajes ya descargados

tg transcribe [--provider …]

Transcribir notas de voz a texto para que aparezcan en la búsqueda

tg untrack --chat X

Quitar el seguimiento del chat (los archivos quedan en el disco)

tg meta / tg index

Actualizar nombres de chats / reindexar el archivo

tg login [--account имя]

Autorizar una sesión de Telegram (teléfono / código / 2FA)

El chat se puede indicar como id, un alias de config.toml, parte del nombre, @username o un enlace t.me/.... Los mensajes nuevos se descargan con todas las reacciones, las encuestas y los eventos de servicio.


🎙 Transcripción de voz

El proveedor se define en config.toml [transcription]:

Proveedor

Coste

Requisitos

whisper-local

gratis, local

faster-whisper, modelo small por defecto

telegram

gratis

Telegram Premium en la cuenta

openai

de pago (Whisper API)

OPENAI_API_KEY en .env


👥 Varias cuentas

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

tg login --account backup autoriza una nueva sesión. download / sync / dialogs / meta tienen la opción --account. Cada chat del manifiesto está actado a su cuenta.


🗺 Estado

Etapa

Estado

Qué incluye

A

✅ listo

Índice, búsqueda, CLI, integración con Claude Code

B

✅ listo

Descargador (download/sync, append-only), multimedia según configuración, backfill, transcripción, gestor (manifest.json), varias cuentas, protección anti FloodWait

C

✅ listo

Visores: tg web (navegador, multimedia) y config tui (terminal)

Próximo: sincronización automática, OCR de imágenes, proveedor de Azure Speech, exportación de selecciones.


🔒 Seguridad

telegram.session y .env dan acceso total a la cuenta de Telegram. Guarda estos archivos en un repositorio privado separado con los datos, no los concilia en este repositorio ni los publiques en ningún otro lugar.


Hecho para que el agente recuerde la conversación mejor que usted.

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