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.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.