Telegram (kotlogramme)

io.github.J0s3f由 GitHub 帳號 J0s3f 發布v0.11.1更新於 Nov 8, 2026

Read and, if allowed, act on your own Telegram account: chats, messages, contacts, files.

已驗證STDIO僅桌面檔案與儲存溝通與協作

概覽

AI 產生的概覽

把本機 Telegram 用戶端當成 MCP 伺服器執行,讓助理讀取你的聊天、訊息、聯絡人和檔案,並可選擇傳送或刪除。

可以做什麼
  • 列出聊天和對話資料夾,讀取歷史紀錄並搜尋訊息
  • 列出聯絡人、群組成員和使用中的工作階段
  • 等待下一則新訊息,可限定在某個聊天
  • 在較高權限層級下傳送、編輯、轉寄、回應和置頂訊息,或刪除訊息、移除成員和封鎖他人
  • 從指定目錄傳送檔案,並把訊息中的媒體下載到該目錄
適用情境
當你希望桌面端 AI 應用直接操作自己的 Telegram 帳號時使用:整理或搜尋對話、起草並傳送回覆、取出聊天中的媒體。請選擇能完成任務的最低權限層級。
執行需求
在 Windows、Linux 或 macOS(x86_64 或 aarch64)上執行的本機程序;原生執行檔不需 Java,JVM 版本需要 JDK 25。需要 my.telegram.org 提供的 Telegram API 憑證,以 TG_API_ID 和 TG_API_HASH 設定,並用電話號碼和驗證碼完成一次登入(或使用機器人權杖)。需要連線到 Telegram 的網路。權限以 --access 設定,檔案工具需選用的 --files-dir。
安裝前請注意
它以你的個人帳號而非機器人身分登入,須遵守 Telegram 服務條款,大量或自動傳送可能觸發流量限制或帳號限制。工作階段檔案等同帳號本身:能讀取它或以你的身分執行程式的人擁有你的全部權限。權限層級只限制此伺服器,不限制工作階段本身。在 MCP 模式下,訊息文字、姓名和檔名會傳送給 AI 應用及其供應商。訊息文字可能含有提示注入,與陌生人聊天時建議使用唯讀模式。不要與同一工作階段上的其他 kotlogramme 指令同時執行。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Telegram (kotlogramme),將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

kotlogramme-cli

A command-line Telegram client written in Kotlin, built on the kotlogramme facade.

It aims to be two things at once: a genuinely useful, scriptable client for the terminal, and the reference consumer that exercises the whole kotlogramme surface so its gaps are found by a real application.

Status: usable. Phases 1-9 are implemented: authentication, configuration, dialogs, history, sending and editing, media and files, contacts, search, chat members, dialog folders, live updates, an interactive shell, admin rights, stickers and inline. The current release is v0.11.1, carrying the fat jar and the distribution; it builds on the kotlogram v0.9.15 tag from JitPack. Later additions beyond the original phases: download-media, list-files with a server-side media-kind filter, and an upload progress bar for send-file. Received messages render their formatting, and a message's inline bot is resolved to @username; see docs/features.md for what ships and docs/plan.md for what is left (album sends, chunked download with a progress view, blocking, and the bot-safe numeric peer lookup).

Quick start

bash
kotlogramme config set --api-id <id> --api-hash <hash>   # from my.telegram.orgkotlogramme login --phone +491700000000                  # prompts for the code, then 2FA if setkotlogramme dialogs --limit 20kotlogramme history @some_chat --limit 50kotlogramme send @some_chat "hello from the terminal"kotlogramme send-file @some_chat clip.mp4                  # detects the kind: a streamable videokotlogramme send-file @some_chat clip.mp4 --no-detect       # ...or send the raw bytes as a documentcat photo.png | kotlogramme send-file @some_chat - --name photo.png   # ...or pipe the bytes on stdinkotlogramme list-files @some_chat --kind video             # the chat's videos, filtered by Telegramkotlogramme download-media @some_chat 12345                # save a message's media, named after itkotlogramme stickers                                       # installed sticker setskotlogramme listen                                         # follow new messageskotlogramme shell                                          # interactive REPL

listen [--once] [--all] [--json] [--chat <id|@username|title>] follows the live update stream. Read receipts, contact status and other updates without a message are hidden unless --all is given, and then print their content as JSON. --chat shows only messages from that chat, so listen --once --chat @ada waits for the next message there. --once stops after the first shown update, --json prints one object per line, and Ctrl-C ends the command cleanly. The stream is followed on the library's own background update loop, which polls in short waits and joins its thread on stop, so a stop costs at most one of those short polls rather than the library's 30 s one.

list-files <peer> lists a chat's files, filtered by media kind on Telegram's side rather than by scanning history, so it reaches the whole chat and not just the part a history read has covered. --kind names the filter (photo, video, photo-video, document, audio, voice, gif, animation), --limit caps the page, and --total prints just how many files the chat holds.

download-media <peer> <message-id> [<target>] writes a message's media to a local file. Without a target the file is named after the media's own name, falling back to the message id, and lands in the working directory; missing parent directories are created and an existing file is overwritten. The command prints the path and the byte count, so a script can read either.

Every command renders as a table by default. The global --plain and --json options, which go before the command (kotlogramme --json history @ada), switch one run to tab-separated plain text or to JSON, and --table forces the table; config set --format stores the default. In JSON every output line is one JSON value: a table is an array of objects, a statement is {"message": "..."}, a count is {"count": N}, and a listing cut short ends with {"next_after": "..."}. import-contacts --from-json FILE (- for stdin) takes a JSON array of {"phone", "first_name", "last_name"} objects. Tables wrap to the width of the terminal; --table-width N before the command sets the width yourself (0 never wraps), which is also how to get a wrapped table into a file. kotlogramme doctor checks the installation: the native library, the Telegram schema, the terminal libraries, the configuration and the network, without needing API credentials, and the account too when they are set.

Use it from an AI application (MCP)

kotlogramme mcp runs the client as a Model Context Protocol server over stdin and stdout. Log in once with kotlogramme login, then register the command with your AI application, for example in Claude Desktop's claude_desktop_config.json:

json
{ "mcpServers": { "telegram": {  "command": "C:\\Tools\\console\\kotlogramme.exe",  "args": ["mcp"],  "env": { "TG_API_ID": "...", "TG_API_HASH": "..." } } } }

or claude mcp add telegram -- kotlogramme mcp for Claude Code. By default it is read only: it can list chats, read and search messages, list contacts, members and sessions, and wait for the next message. --access read-write adds sending, editing, forwarding, reacting and pinning; --access full adds deleting, removing and blocking people, changing admin rights and ending sessions. An AI application that can write acts as you and reaches real people, so choose the lowest level that does the job. --files-dir <directory> adds tools that send files from that directory and save downloads into it, and nothing outside it. Message texts come from other people, so the server tells the model to treat them as data, not as instructions. The tools are listed in docs/features.md.

AI agents: to download and install the server for a person, follow docs/agent-install.md.

Upload progress

send-file draws a one-line progress bar while the bytes go out, showing the percentage, the bytes sent so far, the total and the current rate:

bash
kotlogramme send-file @some_chat clip.mp4

The bar is on by default when the output is a terminal, and off when it is piped or redirected, so a script gets no carriage returns in its output. --progress forces it on and --no-progress turns it off; --no-progress wins if both are given, exactly as --no-color wins over --color. Only send-file uploads bytes, so only send-file has these flags. With --no-color the bar is plain ASCII. An upload that finishes before the first tick draws nothing at all, and the line is erased whether the upload finished, failed or was interrupted with Ctrl-C.

Piped input is spooled to a temporary file before the upload starts, because Telegram has to be told the total before the first part is sent and a pipe carries no length. The spool file is what makes a cat photo.png | kotlogramme send-file @some_chat - upload the exact bytes that were piped, and it also gives the bar a real total, so a piped upload gets a percentage too. The spool file is deleted once the upload ends, whichever way it ended. The one cost is that the bytes pass through the system's temporary directory once: that costs disk I/O rather than memory, and the upload itself still streams in chunks rather than holding the whole file in the heap.

Getting the client

The current release is v0.11.1. Its GitHub Release carries the JVM artifacts below and five single-file native executables:

  • kotlogramme-all.jar - a single runnable fat jar. Run it with JDK 25:

    bash
    java -jar kotlogramme-all.jar --help
  • kotlogramme-0.11.1.zip - the distZip distribution. Unpack it and run kotlogramme-0.11.1/bin/kotlogramme (or kotlogramme-0.11.1\bin\kotlogramme.bat on Windows); the jar and its dependencies live in lib/.

  • Single-file native executables — kotlogramme-0.11.1-windows-x86_64.exe and kotlogramme-0.11.1-{linux,macos}-{x86_64,aarch64}. Run the downloaded file directly; on Linux/macOS first use chmod +x. These require no JRE, JDK or installer. Support libraries are embedded by Wrappe and extracted into a temporary cache. See native requirements.

Requirements

  • JDK 25 to run the JVM distributions; native executables require no Java. Every library below, and the native Telegram library for the host, are bundled into the distribution. Gradle can fetch the JDK automatically via the toolchain resolver when building.
  • Telegram API credentials: an api_id and api_hash from https://my.telegram.org, set with kotlogramme config set or the TG_API_ID/TG_API_HASH environment variables.
  • A Telegram account to sign in with (kotlogramme login), or a bot token. Reading dialogs, history and a chat's files needs an ordinary account.
  • A supported platform: Windows, Linux or macOS on x86_64 or aarch64.
  • Network access to Telegram.

Dependencies

The client is built from these libraries. The distribution is self-contained - they are all bundled into kotlogramme-all.jar, so none has to be installed - and each keeps its own licence.

  • com.github.J0s3f:kotlogram - the facade this client exercises, pinned by tag (see Picking the facade version); it carries grammers and the six native Telegram libraries.
  • Clikt 5.1.0 - command-line parsing, options and help.
  • JLine 4.4.6 - the interactive shell, completion and terminal output.
  • kotlinx.serialization 1.11.0 (JSON) - the --json output format and the configuration file.
  • SLF4J 2.0.20 (simple binding) - logging, quiet unless a level is set.

Build and run

bash
./gradlew build          # compile and run the offline test suite./gradlew installDist    # build the runnable distributionbuild/install/kotlogramme/bin/kotlogramme --help

On Windows, use gradlew.bat and the generated build\install\kotlogramme\bin\kotlogramme.bat.

Standalone GraalVM builds packed with Wrappe run without a JRE or JDK on Windows x86_64 and Linux/macOS x86_64 and ARM64:

powershell
.\scripts\build-native-windows.ps1build\distributions\kotlogramme-0.1.0-SNAPSHOT-windows-x86_64.exe --help

The script uses C:\Tools\graalvm-jdk-25.0.4+7.1 by default. Building also needs the MSVC C++ tools and Windows SDK. It compiles the native client and uses Wrappe to create and test one portable executable. CI uses Liberica NIK 25 on all five native targets; releases contain their single-file executables alongside the bundled jar and Java zip. Windows ARM64 uses the JVM distribution. See docs/native-image.md for setup, platform requirements and verification.

Picking the facade version

The client depends on the facade's v0.9.15 tag, resolved from JitPack. To pin a different one, pass it explicitly - any published facade tag works:

bash
./gradlew test -PkotlogrammeVersion=<tag>

Documentation

Safety and limits

  • Unofficial. kotlogramme is not made, endorsed or supported by Telegram. It signs in as your own user account over MTProto, not as a bot, so Telegram's API Terms of Service apply to you. Bulk or automated sending, joining and adding people can trigger flood waits or restrictions on the account; that risk is yours.
  • The session file is the account. Whoever can read the session file in the configuration directory, or run the program as you, has everything you have. Keep it private, never commit it, never share it. The same holds for the API id and hash.
  • Access levels are a limit of this server, not of Telegram. --access read-only keeps the tools from changing anything, but the session itself keeps full authority inside the process.
  • What the AI reads leaves your machine. In MCP mode, the messages, names and file names a tool returns are passed to the AI application and its provider. Choose chats and an access level accordingly.
  • Message texts can be hostile. Other people write them, and a message can try to instruct the model. The server says so in its instructions, but no instruction is a guarantee: prefer read-only when the account receives messages from strangers, and read what a write or delete tool is about to do.
  • One connection at a time. Do not run mcp together with another kotlogramme command, the shell or listen on the same session; Telegram may reject parallel use of one login.
  • No warranty. See the Apache-2.0 license below.

License

This project is licensed under Apache-2.0; see LICENSE. It builds on the kotlogramme facade, which is licensed the same way and which in turn depends on grammers (dual-licensed Apache-2.0 or MIT), whose notices remain authoritative.

來源:README.md,提交 79ed8ca

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:該軟體包類型無法在沙箱中執行。

版本歷史

1
  1. v0.11.1最新Nov 8, 2026

評分

已滿足適用檢查項的 40%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。