mcp-telegram-agent
This MCP server lets an AI agent send and manage Telegram bot messages, media, and interactive content without using a personal Telegram account.
Send Markdown/HTML text messages with inline buttons, reply keyboards, silent mode, and content protection.
Send local documents, photos, videos, audio files, and voice notes.
Send 2–10 photos or videos as a grouped media album.
Create polls and quizzes with options, correct answers, and explanations.
Share map locations, contact cards, and animated dice/random emoji.
Broadcast bot status actions such as typing, uploading, recording, or finding location.
Edit previously sent text/keyboards and delete bot messages by message ID.
Target the configured default chat or specify any user, group, or channel with
chat_id.
Enables AI agents to interact with Telegram Bot API, including sending text and rich media, local files, albums, inline and reply keyboards, polls and quizzes, locations, contacts, dice, chat actions, and editing or deleting messages.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-telegram-agent send a message to my Telegram chat saying the build passed"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
📬 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.
🔐 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-agentor the compacttg-agentalias.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
Open Telegram and search for @BotFather (verified blue check).
Send
/newbotand follow the prompts: choose a display name, then a username ending inbot(e.g.my_alert_bot).BotFather replies with your Bot Token, e.g.
123456789:AAHxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Keep it secret — anyone with this token can control your bot.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
Send any message (e.g. "hi") to your new bot.
Open this URL in a browser, replacing
<YOUR_BOT_TOKEN>with your token:https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdatesIn the JSON response, locate
"chat":{"id": 123456789, ...}— that number is your Chat ID.Alternative: send any message to
@userinfobotand 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
@userinfobotto the group and forward a group message to it, orDisable the bot's Group Privacy via @BotFather (
/setprivacy→ select your bot → Disable), post a message in the group, then checkgetUpdatesas 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_idomitted → the message goes to theTELEGRAM_DEFAULT_CHAT_IDfrom your config.chat_idprovided → 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:
{
"mcpServers": {
"Telegram": {
"command": "uvx",
"args": ["mcp-telegram-agent"],
"env": {
"TELEGRAM_BOT_TOKEN": "YOUR_TELEGRAM_BOT_TOKEN",
"TELEGRAM_DEFAULT_CHAT_ID": "YOUR_CHAT_ID"
}
}
}
}💡 Both
envvariables 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 noenvblock at all:
{
"mcpServers": {
"Telegram": {
"command": "uvx",
"args": ["mcp-telegram-agent"]
}
}
}🧰 Available Tools
Tool | Description |
| Send Markdown/HTML text with inline buttons or custom reply keyboards. |
| Send any local file (PDF, CSV, code, logs, archives). |
| Send image files with captions and inline buttons. |
| Send video files as native players. |
| Send music tracks or native voice audio notes. |
| Deliver 2 to 10 photos or videos as a grouped carousel. |
| Create interactive single/multiple choice polls or scored quizzes. |
| Broadcast map location points via coordinates. |
| Share phone contact cards. |
| Send animated dice, basketball, football, or slot machines. |
| Display temporary bot statuses (typing, uploading). |
| Dynamically update previously sent text and keyboards. |
| 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.logto 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_idis omitted, messages go toTELEGRAM_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
releasebranch: open a PRmain→release, bumpversioninpyproject.tomlwithin 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
releaseare blocked by branch protection; always go through a PR.
📄 License
This project is licensed under the MIT License.
Available Tools
13 toolsdelete_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
Scored across 13 tools
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.
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.
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.
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
Related MCP Connectors
Let AI assistants post to your Telegram chats, groups and channels. Not affiliated with Telegram.
WhatsApp and Telegram for AI agents, behind a policy gateway. OAuth or access key.
Multi-tenant Telegram gateway for AI agents — HTTP+stdio, 8 tools, MTProto User API
Email, WhatsApp and Telegram for AI agents: send, campaigns, automations, contacts, agent inboxes.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to send and receive messages, media, and files on Telegram, and manage chats via a bot token.1737 PyPIMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with the Telegram Bot API, allowing them to send messages, forward messages, get bot information, and receive updates.11 npm3MIT
- AlicenseBqualityDmaintenanceEnables AI agents to send notifications and media (text, photos, documents, videos) via a Telegram bot.4197 npm4Do What The F*ck You Want To Public
- AlicenseNot gradedqualityCmaintenanceEnables 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