Skip to main content

A trusted, open-source Telegram MCP server — bot token auth only, no personal account access

Project description

tgbot-mcp

PyPI version Python License: MIT

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_reply to minimise API calls while staying responsive.
  • Zero external services. Pure Python + httpx + fastmcp.

Quick Start

1. Create a Telegram Bot

  1. Open Telegram and message @BotFather.
  2. Send /newbot and follow the prompts.
  3. Copy the bot token (looks like 123456:ABC-DEF...).
  4. Start a chat with your new bot, then visit:
    https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates
    
    Send any message to the bot and look for "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-mcp

Then use "command": "tgbot-mcp" (without uvx) 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_ID receives messages.
  • No personal Telegram account credentials are ever required.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tgbot_mcp-0.1.2.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tgbot_mcp-0.1.2-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

Details for the file tgbot_mcp-0.1.2.tar.gz.

File metadata

  • Download URL: tgbot_mcp-0.1.2.tar.gz
  • Upload date:
  • Size: 8.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for tgbot_mcp-0.1.2.tar.gz
Algorithm Hash digest
SHA256 99d959a80fa7d61834cd586ef3c4f23d496d4bafe22e6eb9d175319162228477
MD5 2a7c68f0fa3f47ffd6d7f3dd1d092a1e
BLAKE2b-256 8bfdaaff3c725eb6192fc5d08d2609d1544fc4d016e7ab5dd6fd00c64eabd092

See more details on using hashes here.

File details

Details for the file tgbot_mcp-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: tgbot_mcp-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 9.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for tgbot_mcp-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 72e13fcd6a60acbf928b2d0d2991f263534309fdba2a299741cd7574eec0f8d9
MD5 7d95f4ea48f8a3aa714ab2d9629c2074
BLAKE2b-256 f7a6673386e4328746c10bdf9662864a00a26b28b6a27aa5d79772d7884ca474

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page