Skip to main content
Glama
letopis-mcp

letopis-mcp

by Toligrim

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

Telegram チャット履歴のアーカイブとスマート検索のエンジン

JSONL の生メッセージ · ロシア語の形態素解析対応の全文検索 · ダウンローダー+マネージャー

Python 3.10+ Telethon SQLite FTS5 License


コンセプト

Летопись はボットでもサービスでもなく、CLIツールです。LLMエージェント(主に Claude Code)が、あなたの Telegram チャット履歴を読み込み、通常のナレッジベースのようにその内容に基づいて質問に答えられるように設計されています。

アーカイブは通常のファイルとして保存されます。.jsonl 形式で、チャットごと・月ごとに1ファイル、append-only です。その上には、ロシア語の語形変化を理解する全文検索(FTS5)の SQLite インデックスが構築されています。たとえば「хостинг」という検索クエリで「хостингами」という語を含むメッセージも見つかります。検索対象には音声メッセージの文字起こし、ファイル名、アンケートの本文も含まれます。

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

エンジンとデータは分離されています。 このリポジトリにはコードのみが含まれます。 チャットのアーカイブ本体、config.toml、.env、Telegram セッションは別のプライベートリポジトリに置かれ、何を公開し、何を非公開にするかをあなたが管理できます。詳しくは 「構成」 のセクションを参照してください。


Related MCP server: telegram-user-mcp

✨ 機能

🔎 全文検索

SQLite FTS5 + pymorphy3: 完全一致の単語だけでなく、レンマ(語の見出し形)で検索します。

📦 ファイルとしてのアーカイブ

archive/<chat_id>/<YYYY-MM>.jsonl、append-only。過去のデータを書き換えることはありません。

⬇️ マネージャー付きダウンローダー

download / sync は新しい分だけを追加取得し、manifest.json が追跡対象を記憶します。

🎙️ 音声の文字起こし

ローカル(faster-whisper)、Telegram Premium または OpenAI Whisper API を使用。

🌐 Web ビューア

チャット → トピックチップ、無限スクロール、フィルター、音声プレイヤー、返信へのジャンプ。

⌨️ TUI ビューア

同じ機能をターミナルで利用(textual)。

👥 複数アカウント

異なるチャットを異なる Telegram アカウントでダウンロードできます。

🤖 エージェント向け設計

JSON 出力、コンパクトな短いフォーマット、安定した CLI コントラクト。


🚀 クイックスタート

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

これはエンジンのみです。特定のアーカイブに組み込むには、監視するデータ専用リポジトリを作成し、そこにラッパー ./tg を置きます。

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

その後は、すべてデータリポジトリのルートから実行します。

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

エンジンはデータのルートを自動的に見つけます。tg を起動すると、現在のディレクトリから上の階層へ向かって config.toml と archive/ が並ぶフォルダを探します(または環境変数 TG_ROOT で明示的に指定できます)。

🤖 ChatGPT 向け読み取り専用 MCP

Letopis は ChatGPT の読み取り専用 MCP retrieval gateway として動作できます。サーバーは通常の検索と同じ data/index.db を使いますが、公開するのは安全な取得系ツール(アーカイブの概要・検索・集計・メッセージ抽出・ローカルコンテキスト)の5つのみです。MCP プロセスは Telegram の同期を行わず、ファイルのダウンロードもインデックスの変更も行いません。

インストールと実行

エンジンの環境に MCP SDK とテスト用依存関係をインストールします。

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

entrypoint 経由で起動します。

.venv/bin/letopis-mcp

代替の起動方法は .venv/bin/python -m tgarchive.mcp.server です。既定ではサーバーは http://127.0.0.1:8765/mcp を待ち受け、loopback アドレスのみを受け付けます。本番環境では、プロセス環境に安定したカーソルシークレットとインデックスへのパスを指定してください。例:

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

環境変数

環境変数

既定値

用途

LETOPIS_MCP_DB

config.toml の [general].db の値(通常は data/index.db)

SQLite インデックスへのパス。相対パスはデータプロジェクトのルートから解釈されます。

LETOPIS_MCP_CURSOR_SECRET

なし(プロセスごとに一時的に生成されるランダムシークレット)

不透明カーソルの HMAC-SHA256 検証用。本番環境では必須: これがないとカーソルはプロセス再起動後に維持されません。

LETOPIS_MCP_HOST

127.0.0.1

bind するループバックアドレス。アプリケーションはローカル以外のアドレスを拒否します。

LETOPIS_MCP_PORT

8765

Streamable HTTP エンドポイントの TCP ポート。

LETOPIS_MCP_LOG_LEVEL

INFO

構造化ログのレベル(DEBUG、INFO、WARNING、ERROR、CRITICAL)。

LETOPIS_MCP_MAX_CONCURRENCY

8

読み取り専用 DB に対する同時操作の最大数。

LETOPIS_MCP_QUERY_TIMEOUT_SECONDS

30.0

SQLite クエリと concurrency スロットの待機期限。

LETOPIS_MCP_ROLLING_CALLS_MAX

60

グローバル・rolling。 window 内で完了できる呼び出しの最大数。

LETOPIS_MCP_ROLLING_CHARS_MAX

250000

同じ rolling ウィンドウ内で返す文字数の上限。

LETOPIS_MCP_ROLLING_WINDOW_SECONDS

600

rolling ウィンドウの長さ(秒)。

レート制限は意図的にプロセス単位でglobal(グローバル)になっています。v1 には OAuth 識別されたプリンシプルがないため、ユーザーごとの ACL ではありません。MCP はこれらの変数をプロセス設定として読み取り、.env を自動的に読み込むことはありません。

ChatGPT への接続

推奨される構成では、Letopis をインターネットに直接公開しません。

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

Secure MCP Tunnel の具体的なコマンドや設定手順は、その時点の OpenAI ワークスペースと OpenAI 公式ドキュメントによって異なります。接続時に確認してください。このリポジトリは、未検証の OAuth トンネルコマンドを独自に作り出すことはありません。

デプロイのセキュリティ

MCP プロセスに必要なのは data/index.db と、必要な SQLite sidecar ファイルである data/index.db-wal と data/index.db-shm だけです。MCP プロセスから .env、telegram.session*、archive/、メディア、manifest へはアクセスさせないでください。サーバーは最小権限の専用 Unix ユーザーで実行し、同期とインデックス構築は必要な書き込み権限を持つ別プロセスで実行してください。


🗂 構成

репозиторий с данными/
├── 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 が真実の情報源です。 ファイルは被月にまとめられ、sync は新しいメッセージを追加するだけで、古いメッセージには一切触れません。

  • index.db は派生レイヤーです。 データを消失せずに、いつでも削除して再構築できます(./tg index --rebuild)。

  • manifest.json はマネージャーです。 インデックスを再構築しても残り、追跡対象のチャット/トピックと、それらに対してダウンロードするメディアの種類を保持します。

この分離構成(エンジンは git 上で公開・データは分離されたプライベート)により、チャットの内容を漏洩させるリスクなしに、コードを自由に開発して共有できます。


🧭 コマンド

検索 — エージェントの主な操作

コマンド

説明

tg search <слова…>

全文検索。フラグ: --any(AND の代わりに OR)、--chat、--topic、--sender、--from / --to、--media、--around N(一致した。見つかったメッセージの前後のコンテキスト)、--count、--by-chat / --by-topic / --by-sender(集計)、--rank(関連順)、--json、--short N、--limit N|0

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

タイムライン通りに会話のチャンク全体を出力

tg context --chat X --id N

指定メッセージの前後のメッセージ(--before / --after / --whole-chat)

tg chats

アーカイブ内のチャットの一覧

tg topics --chat X

フォーラムチャット内のトピック

tg status

アーカイブとインデックスの状態

ビューア — 手動モード

コマンド

動作

tg web

ローカルWebインターフェース:チャット → トピックチップ、無限スクロール、フィルター付き検索、日付へのジャンプ、投稿者フィルター(ニックネームをクリック)、写真/動画のインライン表示、文字起こし付きボイスプレーヤー、スレッドへのジャンプ付きリプライ、t.me リンク。ポートは config.toml [web] に指定

tg tui

ターミナルでも同様:/ 検索 · g 日付 · s 投稿者 · o/n 古い/新しい · c コンテキスト · m Telegram で開く · f ファイルを開く · Esc 戻る · q 終了

ダウンローダーとマネージャー

コマンド

動作

tg dialogs

アカウントの全チャット(✓ はアーカイブ済み)

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

チャット/トピックをダウンロードして追跡対象にします。フラグ:--topic N、--from 2025-01、--media photo,voice|all|none

tg sync [--chat X]

追跡中の全チャットの新しいメッセージを追加ダウンロードします

tg media --chat X --media voice

ダウンロード済みメッセージのファイルを追加ダウンロードします

tg transcribe [--provider …]

音声をテキストに書き起こして、検索対象に含めます

tg untrack --chat X

チャットの追跡を解除します(ファイルはディスクに残ります)

tg meta / tg index

チャット名を更新 / アーカイブを追加インデックスします

tg login [--account имя]

Telegram セッションを認証します(電話番号 / コード / 2FA)

チャットは id、config.toml のエイリアス、名前の一部、@username、または t.me/... リンクで指定できます。新しいメッセージは、リアクション、投票、サービスイベントも含めてダウンロードされます。


🎙 ボイスメッセージの文字起こし

プロバイダーは config.toml [transcription] で指定します:

プロバイダー

料金

要件

whisper-local

無料・ローカル

faster-whisper、既定モデルは small

telegram

無料

アカウントに Telegram Premium が必要

OpenAI

有料(Whisper API)

.env の OPENAI_API_KEY


👥 複数アカウント

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

tg login --account backup は新しいセッションを認証します。download / sync / dialogs / meta には --account フラグがあります。マニフェスト内の各チャットは、それぞれのアカウントに紐付けられています。


🗺 ステータス

段階

ステータス

内容

A

✅ 完了

インデックス、検索、CLI、Claude Code 連携

B

✅ 完了

ダウンローダー(download/sync、append-only)、設定に応じたメディア、バックフィル、文字起こし、マネージャー(manifest.json)、複数アカウント、FloodWait 対策

C

✅ 完了

ビューアー: tg web(ブラウザ、メディア)と tg tui(ターミナル)

今後: スケジュールによる自動同期、画像のOCR、Azure Speech プロバイダー、選択結果のエクスポート。


🔒 セキュリティ

telegram.session と .env は Telegram アカウントへの完全なアクセスを提供します。これらはデータとともに別のプライベートリポジトリに保存し、このリポジトリにはコミットしないでください。また、どこにも公開しないでください。


エージェントがあなた自身よりも会話をよく記憶しているように作られました。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    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.
    16 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Local-first, read-only MCP server for searching and retrieving cited evidence from archived Telegram chats, including transcripts and media metadata.
    5
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Lets AI agents search and read your personal Telegram and WhatsApp conversations through a self-hosted, read-only MCP server backed by a single SQLite file.
    2
    AGPL 3.0