mcp-telegram-agent

io.github.a19901201Published by GitHub account a19901201v0.1.8Updated Nov 5, 2026

Full Telegram Bot control for AI agents via pure Bot API: zero login risk, one Bot Token.

Overview

AI-generated overview

Telegram bot server that lets an assistant send messages, local files, media, polls and locations to chats, and edit or delete its own messages.

What you can do
  • Send formatted text messages with inline or reply keyboards, and show typing or upload status
  • Upload local files: documents, photos, videos, audio tracks or voice notes, and albums of 2 to 10 photos or videos
  • Post interactive cards: polls and quizzes, map locations, contact cards and animated dice
  • Edit the text or keyboard of a previously sent message, or delete a message the bot sent
When to use it
Useful when you want an assistant to push notifications, reports, logs or screenshots to your phone, a group or a channel, or to run quick polls and quizzes in a Telegram chat without exposing a personal account.
Requirements
Runs locally as a Python package, typically launched with uvx. A Telegram bot token from BotFather and a default chat ID are supplied through the TELEGRAM_BOT_TOKEN and TELEGRAM_DEFAULT_CHAT_ID environment variables; both are optional at startup but needed for actual sends. The target user must have started the bot, and the bot must be a member or admin of the group or channel. Network access to the Telegram Bot API.
Before you install
The bot token controls the bot, so keep it secret. Tools can send local files from the machine to Telegram chats, so file paths and their contents leave the device. Messages, edits and deletions are real actions in chats and channels; deletion only works for messages the bot itself sent. Passing an explicit chat_id can post to any chat the bot can reach.

Installation

In SourceWeft

  1. Open mcp-telegram-agent in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

📬 mcp-telegram-agent

Give your AI agent full Telegram Bot superpowers — zero login risk, zero setup.

A Model Context Protocol (MCP) server empowering AI agents with Telegram Bot capabilities. Built with Python (SDK-compatible with both mcp 1.x FastMCP and 2.x MCPServer), designed to work seamlessly out-of-the-box with uvx and modern AI coding agents like VS Code Cline and Claude Desktop. Also includes the ultra-short command alias tg-agent.

[PyPI Version] [Python Versions] [PyPI Downloads] [License: MIT]

English · 繁體中文 · 简体中文

🔐 Stop giving AI your personal Telegram account credentials.

mcp-telegram-agent is a lightweight, zero-login-risk notification and delivery tool — just one Bot Token sends local files, reports, interactive keyboards, and rich notifications straight to your phone.


✨ Highlights

  • Pure Bot API Architecture — Zero login session risk, no SMS codes or sensitive credential files needed.
  • Dual CLI Entry Points — Call via standard mcp-telegram-agent or the compact tg-agent alias.
  • Full Keyboard Support — Effortlessly construct dynamic Inline Keyboards (with URLs or callback data) and custom Reply Keyboards.
  • Rich Media & Local Files — Deliver logs, reports, source code, images, audio, voice notes, videos, and multi-image albums (2–10 files).
  • Interactive Tooling — Launch quizzes, single/multiple-choice polls, GPS coordinates, digital contact cards, and animated dice.
  • Message Lifecycle — Broadcast bot statuses (typing, uploading) and edit or delete messages on the fly.
  • Instant uvx Execution — Run directly with no virtual environments or manual package installs.

🚀 Quick Start

1️⃣ Create a Telegram Bot & Get the Token

  1. Open Telegram and search for @BotFather (verified blue check).
  2. Send /newbot and follow the prompts: choose a display name, then a username ending in bot (e.g. my_alert_bot).
  3. BotFather replies with your Bot Token, e.g. 123456789:AAHxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Keep it secret — anyone with this token can control your bot.
  4. Important: open your new bot's chat and press Start (or send /start). A bot cannot message a user who has never started a conversation with it.

2️⃣ Get Your Personal Chat ID

  1. Send any message (e.g. "hi") to your new bot.
  2. Open this URL in a browser, replacing <YOUR_BOT_TOKEN> with your token: https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
  3. In the JSON response, locate "chat":{"id": 123456789, ...} — that number is your Chat ID.
    • Alternative: send any message to @userinfobot and it replies with your ID.

3️⃣ Send to Groups or Channels (Optional)

  • Add the bot to the group first (via group settings → Add members). For channels, the bot must be added as an administrator to post.
  • Group IDs are negative numbers (e.g. -1001234567890). To find one:
    • Temporarily add @userinfobot to the group and forward a group message to it, or
    • Disable the bot's Group Privacy via @BotFather (/setprivacy → select your bot → Disable), post a message in the group, then check getUpdates as above.
  • Once the bot is a member of the group/channel, it can send messages there — no extra configuration needed.

4️⃣ Sending to Any Chat at Runtime

TELEGRAM_DEFAULT_CHAT_ID is only the fallback target. Every tool accepts an optional chat_id parameter, so you can simply ask your AI agent to "send this to chat ID -1001234567890":

  • chat_id omitted → the message goes to the TELEGRAM_DEFAULT_CHAT_ID from your config.
  • chat_id provided → the message goes to that user/group/channel instead.
  • Requirement: the bot must be a member of that group/channel (or the target user must have pressed Start on the bot).

5️⃣ Configuration for AI Clients

Add the configuration below to your MCP settings file (e.g., cline_mcp_settings.json or claude_desktop_config.json).

✅ Example A — Universal Default (Recommended)

A universal configuration that works with every MCP client — just fill in your bot token and chat ID:

json
{  "mcpServers": {    "Telegram": {      "command": "uvx",      "args": ["mcp-telegram-agent"],      "env": {        "TELEGRAM_BOT_TOKEN": "YOUR_TELEGRAM_BOT_TOKEN",        "TELEGRAM_DEFAULT_CHAT_ID": "YOUR_CHAT_ID"      }    }  }}

💡 Both env variables are optional. If they are missing, the server still starts normally — it returns a clear, human-readable error only when a tool call actually needs the token or the fallback chat ID. This also allows a credential-free trial run with no env block at all:

json
{  "mcpServers": {    "Telegram": {      "command": "uvx",      "args": ["mcp-telegram-agent"]    }  }}

🧰 Available Tools

ToolDescription
send_text_messageSend Markdown/HTML text with inline buttons or custom reply keyboards.
send_local_documentSend any local file (PDF, CSV, code, logs, archives).
send_local_photoSend image files with captions and inline buttons.
send_local_videoSend video files as native players.
send_local_audio_or_voiceSend music tracks or native voice audio notes.
send_media_albumDeliver 2 to 10 photos or videos as a grouped carousel.
send_pollCreate interactive single/multiple choice polls or scored quizzes.
send_locationBroadcast map location points via coordinates.
send_contactShare phone contact cards.
send_diceSend animated dice, basketball, football, or slot machines.
send_chat_actionDisplay temporary bot statuses (typing, uploading).
edit_message_textDynamically update previously sent text and keyboards.
delete_messageClean up or remove specific messages.

💬 Usage Examples

Once configured, simply talk to your AI agent in natural language — it picks the right tool automatically. Below are typical requests together with the tool calls the agent makes:

📢 Send a formatted notification

"Tell me in Telegram that the nightly build succeeded, with a button linking to https://example.com"

json
{  "tool": "send_text_message",  "arguments": {    "text": "✅ *Nightly build succeeded!*",    "parse_mode": "Markdown",    "inline_buttons": [[{"text": "Dashboard", "url": "https://example.com"}]]  }}

📁 Share local files

"Upload logs/app.log to my Telegram and summarize the errors"

json
{  "tool": "send_local_document",  "arguments": {    "file_path": "logs/app.log",    "caption": "Error log summary: 3 timeout warnings"  }}

🖼️ Send an album

"Send the three screenshots in screenshots/ to my Telegram as one album"

json
{  "tool": "send_media_album",  "arguments": {    "file_paths": ["screenshots/1.png", "screenshots/2.png", "screenshots/3.png"],    "caption": "Latest UI screenshots"  }}

🗳️ Run a quiz in a group

"Post a quiz to chat ID -1001234567890: which port does HTTPS use? Options 80 / 443 / 8080, the answer is 443, with a short explanation"

json
{  "tool": "send_poll",  "arguments": {    "chat_id": "-1001234567890",    "question": "Which port does HTTPS use?",    "options": ["80", "443", "8080"],    "type": "quiz",    "correct_option_id": 1,    "explanation": "HTTPS defaults to port 443."  }}

♻️ Update or clean up messages

"Change that deployment notice to 'finished', then delete the old reminder (ID 120)"

json
{  "tool": "edit_message_text",  "arguments": { "message_id": 123, "text": "🚀 Deployment **finished**" }}
json
{  "tool": "delete_message",  "arguments": { "message_id": 120 }}

💡 When chat_id is omitted, messages go to TELEGRAM_DEFAULT_CHAT_ID; pass it explicitly to reach any user, group, or channel — see step 4️⃣ above.


🛠️ Development & Release Flow

  • Develop against main — all feature work and PRs land here.
  • Publishing happens only from the release branch: open a PR main → release, bump version in pyproject.toml within the PR, then merge — CI builds and publishes to PyPI automatically, and creates a matching GitHub Release (v* tag + auto-generated notes).
  • If the version was not bumped, the workflow skips publishing with a clear warning — docs-only PRs won't break CI.
  • Direct pushes to release are blocked by branch protection; always go through a PR.

📄 License

This project is licensed under the MIT License.

Source: README.md at commit 69e7f86

Tools

13

send_text_message

Send text messages with Markdown/HTML formatting, silent mode, protection, inline buttons, or custom reply keyboards. 發送文字訊息。支援 Markdown 與 HTML 格式解析、靜音推播、內容保護、行內按鈕與底部鍵盤。

Parameterstextrequiredchat_idparse_modeinline_buttonsreply_keyboardprotect_contentremove_keyboardone_time_keyboarddisable_notification

send_chat_action

Broadcast ongoing bot status to the user (e.g., typing, uploading document, recording). 向使用者廣播機器人當前的操作狀態,如打字中、上傳檔案中等。

Parametersactionchat_id

send_local_document

Send any local file (code, reports, logs, zip, pdf) as a general document. 傳送本機任何檔案給使用者,涵蓋程式碼、日誌、PDF 與壓縮檔等。

Parameterscaptionchat_idfile_pathrequiredparse_modeinline_buttonsdisable_notification

send_local_photo

Send a local image file as a full-preview photo. 發送本機圖片檔案,以照片預覽格式呈現。

Parameterscaptionchat_idparse_modephoto_pathrequiredinline_buttons

send_local_video

Send a local video file (MP4, etc.) as a playable streaming video. 發送本機影片檔案,以內嵌播放器形式呈現,支援串流播放。

Parameterswidthheightcaptionchat_iddurationvideo_pathrequiredinline_buttonssupports_streaming

send_local_audio_or_voice

Send a local audio file as a music track or a native voice note (OGG/Opus recommended). 發送本機音訊檔案:mode=audio 以音樂曲目呈現(可附標題與演出者); mode=voice 以原生語音訊息呈現(建議使用 OGG/Opus 編碼)。

Parametersmodetitlecaptionchat_iddurationfile_pathrequiredperformerinline_buttons

send_media_album

Send 2 to 10 local photos or videos as a single grouped album (carousel). 批次發送 2 至 10 個本機圖片或影片,組合成輪播相簿。

Parameterscaptionchat_idfile_pathsrequiredprotect_contentdisable_notification

send_poll

Send a poll or quiz card with clickable options. 發送投票或測驗卡片,供使用者點選。type=quiz 時可指定正確選項與解析說明。

Parameterstypechat_idoptionsrequiredquestionrequiredexplanationis_anonymouscorrect_option_idallows_multiple_answers

send_location

Send a geographic location card that opens directly in the map app. 發送地理位置卡片,可直接開啟地圖導航。

Parameterschat_idlatituderequiredlongituderequired

send_contact

Send a vCard contact so the user can save it to their address book. 發送名片聯絡人,可儲存至通訊錄。

Parameterschat_idlast_namefirst_namerequiredphone_numberrequired

send_dice

Send an animated random-value emoji (dice, dart, basketball, football, bowling, slot machine). 發送擲骰子等動態隨機結果的動畫元件。

Parametersemojichat_id

edit_message_text

Edit the text or keyboard of a previously sent message (does not work for media albums). 編輯先前已發送的文字訊息內容或鍵盤佈局。

Parameterstextrequiredchat_idmessage_idrequiredparse_modeinline_buttonsreply_keyboardremove_keyboardone_time_keyboard

delete_message

Delete a specific message by ID (can only delete messages sent by the bot). 刪除指定 ID 的訊息(僅能刪除機器人自己發送的訊息)。

Parameterschat_idmessage_idrequired

Version history

1
  1. v0.1.8LatestNov 5, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts