tgbot-mcp
A trusted, open-source MCP server for Telegram that enables LLMs to send messages, structured notifications with buttons, and wait for user replies using only bot token authentication.
README
tgbot-mcp
A trusted, open-source MCP (Model Context Protocol) server for Telegram.
Built as a clean alternative to closed-source or opaque Telegram MCP packages — bot token authentication only, no personal account access, no proprietary backend.
Features
- Bot token auth only — uses the official Telegram Bot API (
api.telegram.org). Your personal account is never touched. - 4 purpose-built tools for LLM workflows: send messages, send structured notifications, send notifications with action buttons, and wait for user replies.
- Language-agnostic — tools are written in English, but the LLM responds to users in their own language automatically. No language is hardcoded.
- Smart polling in
wait_for_replyto minimise API calls while staying responsive. - Zero external services. Pure Python + httpx + fastmcp.
Quick Start
1. Create a Telegram Bot
- Open Telegram and message @BotFather.
- Send
/newbotand follow the prompts. - Copy the bot token (looks like
123456:ABC-DEF...). - Start a chat with your new bot, then visit:
Send any message to the bot and look forhttps://api.telegram.org/bot<YOUR_TOKEN>/getUpdates"chat":{"id":...}— that is your chat ID.
2. Register with Your MCP Client
Add the following to your MCP client configuration (e.g. claude_desktop_config.json):
{
"mcpServers": {
"tgbot-mcp": {
"command": "uvx",
"args": ["tgbot-mcp"],
"env": {
"TELEGRAM_BOT_TOKEN": "YOUR_BOT_TOKEN",
"TELEGRAM_CHAT_ID": "YOUR_CHAT_ID"
}
}
}
}
uvx runs the server directly from PyPI without a separate install step. If you don't have uv yet:
curl -LsSf https://astral.sh/uv/install.sh | sh
Alternatively, install manually and run with
pip:pip install tgbot-mcpThen use
"command": "tgbot-mcp"(withoutuvx) in the config above.
Tools
send_message
Send a free-form text message to the configured chat.
| Parameter | Type | Default | Description |
|---|---|---|---|
text |
str |
(required) | Message body. Telegram Markdown supported. |
parse_mode |
"Markdown" | "HTML" | "" |
"Markdown" |
Text formatting mode. |
Example prompt: "Send a Telegram message: 'Build finished successfully in 2m 14s.'"
send_notification
Send a structured notification with an automatic event emoji.
| Event | Emoji |
|---|---|
completed |
✅ |
error |
❌ |
progress |
🔄 |
question |
❓ |
| Parameter | Type | Default | Description |
|---|---|---|---|
event |
str |
(required) | One of the four event types above. |
summary |
str |
(required) | One-line summary (≤200 chars). |
details |
str |
"" |
Optional multi-line detail body. |
Example prompt: "Notify me on Telegram that the data pipeline completed. Include row counts."
send_notification_with_buttons
Send a notification with up to 4 inline action buttons. Ideal when you want the user to pick an option without typing.
| Parameter | Type | Default | Description |
|---|---|---|---|
event |
str |
(required) | Event type. |
summary |
str |
(required) | One-line summary. |
buttons |
list[str] |
(required) | 1–4 button labels. Each label is also the reply value. |
details |
str |
"" |
Optional context text. |
Example prompt: "Ask me via Telegram whether to deploy to staging or production."
wait_for_reply
Block until the user replies (text message or button tap) or the timeout expires.
| Parameter | Type | Default | Max | Description |
|---|---|---|---|---|
max_wait_seconds |
int |
1800 |
no limit | How long to wait for a reply. |
Smart polling schedule:
| Elapsed time | Poll interval |
|---|---|
| 0 – 10 minutes | 30 seconds |
| 10 minutes – 1 hr | 60 seconds |
| 1 hr+ | 120 seconds |
LLM guidelines for max_wait_seconds:
| Scenario | Recommended value |
|---|---|
| Simple yes/no question | 300 (5 min) |
| General task approval | 1800 (30 min) ✓ |
| Stock price / event alert | 1800 (30 min) |
| End-of-day review | 7200 (2 hr) |
| Overnight / long-running job | 86400 (24 hr) |
| Multi-day wait | any value — no limit |
Typical LLM Workflow
LLM: [does some long task]
→ send_notification_with_buttons(
event="question",
summary="Finished analysis. What should I do next?",
buttons=["📊 Generate report", "📧 Send email", "🔁 Re-run with new params"]
)
→ wait_for_reply(max_wait_seconds=1800)
→ [user taps "📊 Generate report"]
LLM: [generates the report]
→ send_notification(event="completed", summary="Report ready!", details="...")
Environment Variables
| Variable | Required | Description |
|---|---|---|
TELEGRAM_BOT_TOKEN |
✅ | Bot token from @BotFather |
TELEGRAM_CHAT_ID |
✅ | Chat ID to send messages to |
Development
# Clone and install in editable mode
git clone https://github.com/TGLEEEE/tgbot-mcp
cd tgbot-mcp
pip install -e ".[dev]"
# Run directly
TELEGRAM_BOT_TOKEN=... TELEGRAM_CHAT_ID=... python -m tgbot_mcp.server
Security
- Only the official Telegram Bot API is used (
api.telegram.org). No third-party relay. - Bot tokens are read from environment variables — never hardcoded.
- Only the chat configured via
TELEGRAM_CHAT_IDreceives messages. - No personal Telegram account credentials are ever required.
License
MIT — see LICENSE.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。