Telegram Bot MCP Server
Allows AI assistants to publish, edit, search, and manage text and photo messages in Telegram channels via a bot.
Click on "Install 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., "@Telegram Bot MCP ServerPublish a message to @my_channel saying 'Hello from AI'"
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.
Telegram Bot MCP Server
A Model Context Protocol (MCP) server that enables AI assistants to publish, edit, search, and manage messages in Telegram channels.
Features
Publish Text Messages: Post new text messages to Telegram channels with formatting support (Markdown/HTML)
Publish Photos: Post photos with optional captions to Telegram channels
Edit Text Messages: Modify existing text-only messages in channels
Edit Photo Captions: Update captions of existing photo messages
Delete Messages: Remove messages from channels
Search Messages: Search through cached messages (local cache)
Channel Info: Retrieve channel metadata and statistics
Related MCP server: Telegram Channel MCP Server
Quick Reference
Task | Message Type | Tool to Use |
Publish a text message | Text |
|
Publish a photo | Photo |
|
Edit a text-only message | Text |
|
Edit a photo's caption | Photo |
|
Delete any message | Any |
|
Search cached messages | Any |
|
Get channel info | - |
|
Important: You cannot use edit_message on photo messages or edit_message_caption on text messages!
Installation
Prerequisites
Python 3.10+ is required
Create a Telegram Bot:
Open Telegram and search for @BotFather
Send
/newbotand follow the instructionsCopy the bot token (format:
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11)
Add Bot to Your Channel:
Create a Telegram channel or use an existing one
Add your bot as an administrator to the channel
Grant the bot permissions:
Post messages
Edit messages of others
Delete messages of others
Get Channel ID:
For public channels, use the username format:
@channelnameFor private channels, you need the numeric chat ID (e.g.,
-1001234567890)You can get this by:
Adding the bot to the channel
Sending a message to the channel
Checking the update using:
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
Install from Source
# Clone the repository
git clone https://github.com/aggeentik/telegram-bot-mcp.git
cd telegram-bot-mcp
# Install with pip
pip install -e .
# Or install with uv (recommended)
uv pip install -e .For Development
# Install with dev dependencies
pip install -e ".[dev]"
# Or with uv
uv pip install -e ".[dev]"Configuration
Environment Variable
Set your Telegram bot token as an environment variable:
export TELEGRAM_BOT_TOKEN="your-bot-token-here"Or add it to your .env file:
TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11Claude Desktop Integration
Add this to your Claude Desktop configuration file:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"telegram-bot": {
"command": "python",
"args": ["-m", "telegram_bot"],
"env": {
"TELEGRAM_BOT_TOKEN": "your-bot-token-here"
}
}
}
}Or if installed via uv:
{
"mcpServers": {
"telegram-bot": {
"command": "uvx",
"args": ["telegram-bot-mcp"],
"env": {
"TELEGRAM_BOT_TOKEN": "your-bot-token-here"
}
}
}
}Usage
Once configured, the server will be available to your MCP client (like Claude Desktop). You can ask the AI assistant to:
"Post a message to @mychannel saying 'Hello from AI!'"
"Publish a photo from /path/to/image.jpg to @mychannel with caption 'Check this out!'"
"Edit message 12345 in @mychannel to say 'Updated message'"
"Search for messages containing 'important' in @mychannel"
"Delete message 12345 from @mychannel"
"Get information about @mychannel"
Available Tools
publish_message
Publish a new message to a Telegram channel.
Parameters:
channel_id(str, required): Channel username (@mychannel) or chat IDtext(str, required): Message text to publishparse_mode(str, optional): Text formatting -"Markdown","HTML", or"None". Default:"Markdown"disable_web_page_preview(bool, optional): Disable link previews. Default:Falsedisable_notification(bool, optional): Send silently. Default:False
Returns:
{
"message_id": 12345,
"chat_id": -1001234567890,
"date": "2024-01-15T10:30:00",
"text": "Your message text",
"link": "https://t.me/mychannel/12345"
}publish_photo
Publish a photo to a Telegram channel with an optional caption.
Parameters:
channel_id(str, required): Channel username (@mychannel) or chat IDphoto(str, required): Photo to send (file path, URL, or file_id)caption(str, optional): Caption text with Markdown/HTML formatting. Max 1024 charactersparse_mode(str, optional): Caption formatting -"Markdown","HTML", or"None". Default:"Markdown"disable_notification(bool, optional): Send silently. Default:False
Returns:
{
"message_id": 12345,
"chat_id": -1001234567890,
"date": "2024-01-15T10:30:00",
"caption": "Photo caption text",
"photo": {
"file_id": "AgACAgIAAxkBAAMCY...",
"file_unique_id": "AQADAgATxxx",
"width": 1280,
"height": 720,
"file_size": 102400
},
"link": "https://t.me/mychannel/12345"
}edit_message
Edit an existing TEXT-ONLY message in a channel.
IMPORTANT: This only works for text messages. If the message contains a photo, use edit_message_caption instead.
Parameters:
channel_id(str, required): Channel username or chat IDmessage_id(int, required): ID of the message to editnew_text(str, required): New message textparse_mode(str, optional): Text formatting. Default:"Markdown"
edit_message_caption
Edit the caption of an existing PHOTO message in a channel.
IMPORTANT: This only works for messages with media. For text-only messages, use edit_message instead.
Parameters:
channel_id(str, required): Channel username or chat IDmessage_id(int, required): ID of the photo message to editnew_caption(str, required): New caption textparse_mode(str, optional): Caption formatting. Default:"Markdown"
delete_message
Delete a message from a channel.
Parameters:
channel_id(str, required): Channel username or chat IDmessage_id(int, required): ID of the message to delete
search_messages
Search messages in local cache (messages published/edited in current session).
Note: Telegram Bot API doesn't support native message search. This searches locally cached messages.
Parameters:
channel_id(str, required): Channel username or chat IDquery(str, optional): Search query (case-insensitive). If None, returns all cached messageslimit(int, optional): Maximum results to return. Default:10
get_channel_info
Get information about a Telegram channel.
Parameters:
channel_id(str, required): Channel username or chat ID
Returns:
{
"id": -1001234567890,
"title": "My Channel",
"username": "mychannel",
"type": "channel",
"description": "Channel description",
"invite_link": "https://t.me/mychannel",
"member_count": 1234,
"status": "success"
}Development
Running Tests
# Install dev dependencies
pip install -e ".[dev]"
# Run all tests
pytest
# Run tests with verbose output
pytest -v
# Run tests with coverage
pytest --cov=telegram_bot --cov-report=html
# Run specific test
pytest tests/test_telegram.py::TestTelegramClient::test_publish_messageCode Quality
# Type checking
mypy telegram_bot
# Linting
ruff check .
# Formatting
ruff format .Running the Server Locally
For testing purposes, you can run the server directly:
# Set your bot token
export TELEGRAM_BOT_TOKEN="your-token"
# Run the server
python -m telegram_botThe server will start and communicate via stdio, following the MCP protocol.
Architecture
Component Structure
telegram-bot-mcp/
├── main.py # Entry point for the server
├── telegram_bot/
│ ├── __init__.py # Package initialization
│ ├── server.py # FastMCP server implementation with tool decorators
│ └── telegram_bot_client.py # TelegramBotClient wrapper
└── tests/
└── test_telegram.py # Comprehensive testsDesign Patterns
Singleton Client: Global
TelegramBotClientinstance reused across tool callsAsync-First: All I/O operations are async for better performance
Error Handling: Graceful error responses with status information
Local Cache: Message caching for search functionality (since Telegram API doesn't support search)
Limitations
Message Types and Editing:
Text messages: Use
edit_message(won't work on photo messages)Photo messages: Use
edit_message_caption(won't work on text-only messages)You cannot change a text message to a photo or vice versa
The bot can only edit messages it sent itself
Message Search: Only searches locally cached messages from current session (Telegram Bot API limitation)
Messages are cached in-memory during the current session
Cache is cleared when the server restarts
You can still edit messages from previous sessions if you know the message_id
Message Retrieval: Telegram Bot API doesn't provide a way to fetch arbitrary messages by ID
Bot Permissions: Bot must be channel admin with appropriate permissions:
Post messages
Edit messages
Delete messages
Edit Time Limit: Telegram has a 48-hour limit for editing messages
Rate Limits: Telegram enforces rate limits on bot API calls
Troubleshooting
"Telegram bot token is required" Error
Make sure you've set the TELEGRAM_BOT_TOKEN environment variable or configured it in your MCP client.
"Chat not found" Error
For public channels, ensure you use
@channelnameformatFor private channels, use numeric chat ID (e.g.,
-1001234567890)Verify the bot is added to the channel as an admin
"Not enough rights to send messages" Error
The bot needs admin permissions in the channel with:
Post messages
Edit messages
Delete messages
"Message can't be edited" Error
This usually means:
Wrong edit method for message type: Use
edit_message_captionfor photos,edit_messagefor textBot didn't send the message: Bots can only edit messages they sent themselves
Message is too old: Telegram has a 48-hour limit for editing messages
License
MIT License - See LICENSE file for details
Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch
Add tests for new functionality
Ensure all tests pass
Submit a pull request
Resources
Support
For issues and questions:
GitHub Issues: Report a bug
MCP Discord: Join the community
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityDmaintenanceEnables AI assistants to send messages and interact with Telegram chats through MCP tools, with support for user management, conversation history, and bot command handling.Last updated1
- Flicense-qualityDmaintenanceEnables sending messages to Telegram channels via MCP protocol, integrating with AI assistants for automated messaging.Last updated7
- Alicense-qualityBmaintenanceEnables AI agents to interact with Telegram accounts through MCP, supporting messaging, contacts, groups, media, and admin functions.Last updated4Apache 2.0
- Flicense-qualityDmaintenanceEnables users to read, search, and manage Telegram messages in channels, groups, and private chats through MCP tools.Last updated
Related MCP Connectors
Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.
Connect any AI agent to 11+ social platforms: schedule, publish & track posts via hosted MCP.
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/aggeentik/telegram-bot-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server