telegram-mcp-kit
by QuocTang
README.md
# 🚀 telegram-mcp-kit
> *MCP server that exposes the [Telegram Bot API](https://core.telegram.org/bots/api) as tools for Claude Code (or any MCP client).*
[](https://opensource.org/licenses/MIT)
[](https://www.python.org/downloads/)
[](https://github.com/astral-sh/uv)
## Table of Contents
- [🚀 Quick Start](#quick-start)
- [🛠️ Installation](#installation)
- [📦 Features](#features)
- [🤝 How to Contribute](#how-to-contribute)
- [💬 Community & Support](#community--support)
- [👥 Repo Contributors](#repo-contributors)
- [⚖️ License](#license)
- [🌟 Star History](#star-history)
---
## 🚀 Quick Start
Get your bot token from [@BotFather](https://t.me/BotFather) on Telegram. Once the server is configured, you can run `/mcp` inside Claude Code to verify it is connected.
## 🛠️ Installation
> Get your bot token from [@BotFather](https://t.me/BotFather) on Telegram first.
### Option 1: From PyPI (recommended)
```bash
claude mcp add telegram-mcp-kit \
-e TELEGRAM_BOT_TOKEN=your-bot-token-here \
-e TELEGRAM_CHAT_ID=your-chat-id \
-- uvx telegram-mcp-kit
```
<details>
<summary>Manual MCP config</summary>
```json
{
"mcpServers": {
"telegram-mcp-kit": {
"command": "uvx",
"args": ["telegram-mcp-kit"],
"env": {
"TELEGRAM_BOT_TOKEN": "your-bot-token-here",
"TELEGRAM_CHAT_ID": "your-chat-id"
}
}
}
}
```
</details>
### Option 2: From GitHub
```bash
claude mcp add telegram-mcp-kit \
-e TELEGRAM_BOT_TOKEN=your-bot-token-here \
-e TELEGRAM_CHAT_ID=your-chat-id \
-- uvx --from "git+https://github.com/QuocTang/telegram-mcp-kit.git" telegram-mcp-kit
```
<details>
<summary>Manual MCP config</summary>
```json
{
"mcpServers": {
"telegram-mcp-kit": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/QuocTang/telegram-mcp-kit.git",
"telegram-mcp-kit"
],
"env": {
"TELEGRAM_BOT_TOKEN": "your-bot-token-here",
"TELEGRAM_CHAT_ID": "your-chat-id"
}
}
}
}
```
</details>
### Option 3: From source
```bash
git clone https://github.com/QuocTang/telegram-mcp-kit.git
cd telegram-mcp-kit
cp .env.example .env # add your TELEGRAM_BOT_TOKEN
uv sync
```
```bash
claude mcp add telegram-mcp-kit \
-- uv run --directory /absolute/path/to/telegram-mcp-kit telegram-mcp-kit
```
<details>
<summary>Manual MCP config</summary>
```json
{
"mcpServers": {
"telegram-mcp-kit": {
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/telegram-mcp-kit",
"telegram-mcp-kit"
]
}
}
}
```
> With this option, `TELEGRAM_BOT_TOKEN` is read from the `.env` file inside the project directory.
</details>
### Environment variables
| Variable | Required | Description |
|----------|----------|-------------|
| `TELEGRAM_BOT_TOKEN` | Yes | Token from BotFather |
| `TELEGRAM_CHAT_ID` | No | Default chat ID (if set, `chat_id` can be omitted in tool calls) |
| `MCP_TRANSPORT` | No | `stdio` (default) or `sse` |
| `MCP_HOST` | No | Bind host (default `127.0.0.1`) |
| `MCP_PORT` | No | Bind port (default `8000`) |
| `HTTP_TIMEOUT` | No | Telegram API timeout in seconds (default `30`) |
## 📦 Features
| 🚀 Feature | 📝 Description |
|------------|----------------|
| 🛠️ **20+ Tools** | Comprehensive coverage for messages, chat management, files/photos, and bot info. |
| 🔍 **Auto-discovery** | Simply add a Python file to the `tools/` folder and it registers automatically. |
| 📡 **Flexible Transport** | Works seamlessly over **stdio** (for local clients) or **SSE** (remote/Docker). |
### Tools List
#### Messages
| Tool | Description |
|------|-------------|
| `send_message` | Send a text message (Markdown/HTML) |
| `edit_message` | Edit an existing message |
| `delete_message` | Delete a message |
| `forward_message` | Forward a message between chats |
#### Updates
| Tool | Description |
|------|-------------|
| `get_updates` | Fetch recent messages/updates the bot received |
#### Chat management
| Tool | Description |
|------|-------------|
| `get_chat_info` | Get chat metadata (name, type, description) |
| `get_chat_member_count` | Count members |
| `get_chat_admins` | List administrators |
| `ban_member` | Ban a user |
| `unban_member` | Unban a user |
| `set_chat_title` | Change group/channel title |
| `set_chat_description` | Change group/channel description |
| `pin_message` | Pin a message |
| `unpin_message` | Unpin a message |
#### Files & photos
| Tool | Description |
|------|-------------|
| `send_photo` | Send a photo by URL or file_id |
| `send_photo_file` | Send a local photo file |
| `send_document` | Send a document by URL or file_id |
| `send_document_file` | Send a local file as document |
| `get_file_info` | Get file metadata + download link |
#### Bot
| Tool | Description |
|------|-------------|
| `get_bot_info` | Get bot name, username, etc. |
## 🤝 How to Contribute
We welcome contributions! Please follow these steps:
1. **Fork** the repository.
2. **Create a new branch** for your feature.
3. **Submit a Pull Request**.
See [CONTRIBUTING.md](CONTRIBUTING.md) for how to add new tools.
### Development
```bash
uv sync # install all deps (including dev)
uv run pytest -v # run tests
uv run ruff check src/ tests/ # lint
```
## 💬 Community & Support
If this repository saves you time, please star the repository!
## 👥 Repo Contributors
<a href="https://github.com/QuocTang/telegram-mcp-kit/graphs/contributors">
<img src="https://contrib.rocks/image?repo=QuocTang/telegram-mcp-kit" alt="Repository contributors" />
</a>
Made with [contrib.rocks](https://contrib.rocks).
## ⚖️ License
MIT License. See [LICENSE](LICENSE) for details.
## 🌟 Star History
[](https://star-history.com/#QuocTang/telegram-mcp-kit&Date)
TDQS
A3.7/5.0
Scored across 20 tools
Disambiguation5/5
All tools have distinct purposes with clear separation; similar pairs like send_document/send_document_file and send_photo/send_photo_file are differentiated by source type (URL/file_id vs local path).
Naming Consistency5/5
All tool names follow a consistent verb_noun snake_case pattern (e.g., ban_member, get_chat_info, send_photo_file).
Tool Count4/5
20 tools is on the higher end but covers core Telegram bot functionalities without being excessive. Each tool is justified.
Completeness3/5
Covers common messaging, moderation, and info retrieval but lacks support for sending stickers, audio, video, location, polls, and other media types, which are notable gaps for a full-featured Telegram toolset.
Maintenance
ActivityInactive
ResponsivenessNo issues