Skip to main content
Glama
mcp-telegram-agent

mcp-telegram-agent

📬 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.


Related MCP server: Telegram MCP Server

🚀 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).

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

{
  "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:

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

🧰 Available Tools

Tool

Description

send_text_message

Send Markdown/HTML text with inline buttons or custom reply keyboards.

send_local_document

Send any local file (PDF, CSV, code, logs, archives).

send_local_photo

Send image files with captions and inline buttons.

send_local_video

Send video files as native players.

send_local_audio_or_voice

Send music tracks or native voice audio notes.

send_media_album

Deliver 2 to 10 photos or videos as a grouped carousel.

send_poll

Create interactive single/multiple choice polls or scored quizzes.

send_location

Broadcast map location points via coordinates.

send_contact

Share phone contact cards.

send_dice

Send animated dice, basketball, football, or slot machines.

send_chat_action

Display temporary bot statuses (typing, uploading).

edit_message_text

Dynamically update previously sent text and keyboards.

delete_message

Clean 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"

{
  "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"

{
  "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"

{
  "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"

{
  "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)"

{
  "tool": "edit_message_text",
  "arguments": { "message_id": 123, "text": "🚀 Deployment **finished**" }
}
{
  "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.

Available Tools

13 tools
delete_messageA

Delete a specific message by ID (can only delete messages sent by the bot).

刪除指定 ID 的訊息(僅能刪除機器人自己發送的訊息)。

Inputs: message_id (required), chat_id. Returns: result

edit_message_textB

Edit the text or keyboard of a previously sent message (does not work for media albums).

編輯先前已發送的文字訊息內容或鍵盤佈局。

Inputs: text (required), message_id (required), chat_id, parse_mode, +4 more. Returns: result

send_chat_actionB

Broadcast ongoing bot status to the user (e.g., typing, uploading document, recording).

向使用者廣播機器人當前的操作狀態,如打字中、上傳檔案中等。

Inputs: action, chat_id. Returns: result

send_contactC

Send a vCard contact so the user can save it to their address book.

發送名片聯絡人,可儲存至通訊錄。

Inputs: first_name (required), phone_number (required), chat_id, last_name. Returns: result

send_diceC

Send an animated random-value emoji (dice, dart, basketball, football, bowling, slot machine).

發送擲骰子等動態隨機結果的動畫元件。

Inputs: emoji, chat_id. Returns: result

send_local_audio_or_voiceB

Send a local audio file as a music track or a native voice note (OGG/Opus recommended).

發送本機音訊檔案:mode=audio 以音樂曲目呈現(可附標題與演出者); mode=voice 以原生語音訊息呈現(建議使用 OGG/Opus 編碼)。

Inputs: file_path (required), mode, title, caption, +4 more. Returns: result

send_local_documentC

Send any local file (code, reports, logs, zip, pdf) as a general document.

傳送本機任何檔案給使用者,涵蓋程式碼、日誌、PDF 與壓縮檔等。

Inputs: file_path (required), caption, chat_id, parse_mode, +2 more. Returns: result

send_local_photoC

Send a local image file as a full-preview photo.

發送本機圖片檔案,以照片預覽格式呈現。

Inputs: photo_path (required), caption, chat_id, parse_mode, +1 more. Returns: result

send_local_videoC

Send a local video file (MP4, etc.) as a playable streaming video.

發送本機影片檔案,以內嵌播放器形式呈現,支援串流播放。

Inputs: video_path (required), width, height, caption, +4 more. Returns: result

send_locationB

Send a geographic location card that opens directly in the map app.

發送地理位置卡片,可直接開啟地圖導航。

Inputs: latitude (required), longitude (required), chat_id. Returns: result

send_media_albumC

Send 2 to 10 local photos or videos as a single grouped album (carousel).

批次發送 2 至 10 個本機圖片或影片,組合成輪播相簿。

Inputs: file_paths (required), caption, chat_id, protect_content, +1 more. Returns: result

send_pollB

Send a poll or quiz card with clickable options.

發送投票或測驗卡片,供使用者點選。type=quiz 時可指定正確選項與解析說明。

Inputs: options (required), question (required), type, chat_id, +4 more. Returns: result

send_text_messageC

Send text messages with Markdown/HTML formatting, silent mode, protection, inline buttons, or custom reply keyboards.

發送文字訊息。支援 Markdown 與 HTML 格式解析、靜音推播、內容保護、行內按鈕與底部鍵盤。

Inputs: text (required), chat_id, parse_mode, inline_buttons, +5 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 13 tools

    Disambiguation4/5

    Each tool maps to a distinct Telegram content type (text, poll, location, contact, dice, album), so selection is mostly unambiguous. The only soft overlap is between send_local_document ('any local file') and the typed senders send_local_photo/video/audio, which an agent could plausibly confuse for a file that is also an image.

    Naming Consistency5/5

    Nearly all tools follow a clean send_<object> snake_case pattern (send_text_message, send_poll, send_location), with edit_message_text and delete_message matching the same verb_noun convention. The send_local_* prefix groups file-based senders predictably, and the mode-based send_local_audio_or_voice is a readable, intentional deviation.

    Tool Count5/5

    13 tools sit squarely in the well-scoped range for a messaging bot surface. Each tool earns its place by covering a distinct Telegram message type rather than duplicating functionality.

    Completeness4/5

    Outbound messaging is thoroughly covered: text, all media types, albums, polls, locations, contacts, dice, plus message edit and delete for lifecycle management. Obvious gaps remain around inbound/read operations (fetching or reading chat history), forwarding, and pinning, which would limit an agent working interactively with a conversation.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to interact with Telegram through 50+ tools for chats, messages, contacts, users, groups, and channels, with per-topic isolation and a reactive inbox for multi-agent use.
      MIT