telegram-bot-mcp
telegram-bot-mcp
Full-featured Telegram Bot API server for MCP (Model Context Protocol). 174 tools covering the entire Bot API — messages, chats, stickers, payments, forums, stories, and more.
Features
Messages — send (text, photo, video, audio, document, location, poll, dice, sticker, media groups), edit, forward, copy, delete, pin/unpin, reactions
Chats — info, settings, permissions, invite links, member management, verification
Bot — commands, profile, settings, description, menu button, admin rights
Stickers — create/edit/delete sticker sets, upload stickers, custom emoji
Payments — invoices, star transactions, gifts, refunds
Forums — create/edit/close/reopen/delete topics
Stories — post, edit, delete, repost
Business — business messages, accounts, connections
Games — send games, set scores, high scores
Webhooks — set, delete, get info
Related MCP server: Better Telegram MCP
Quick Start
npm installClaude Code
claude mcp add -e TELEGRAM_BOT_TOKEN=your_token telegram -- node /path/to/mcp-telegram/index.jsClaude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"telegram": {
"type": "stdio",
"command": "node",
"args": ["/path/to/mcp-telegram/index.js"],
"env": {
"TELEGRAM_BOT_TOKEN": "your_token"
}
}
}
}Environment Variables
Variable | Required | Description |
| Yes | Bot token from @BotFather |
| No | Default chat ID (skip |
| No | Default topic/thread ID for forum supergroups |
Project Structure
index.js # Entry point — registers all tool modules
utils/api.js # Telegram API client, rate limiting, retry logic
tools/
messages/ # send, edit, forward, manage
chat/ # info, settings, invite, members, verify
bot/ # core, commands, profile, settings
stickers.js
payments.js
forum.js
stories.js
business.js
games.js
webhook.jsLicense
MIT
Available Tools
100 toolsanswer_callback_queryA
Answer a callback query from an inline button press. Must be called after receiving a callback_query update.
Inputs: callback_query_id (required), url, text, cache_time, +1 more.
answer_inline_queryC
Answer an inline query with results.
Inputs: results (required), inline_query_id (required), button, cache_time, +2 more.
answer_web_app_queryB
Answer a Web App query sent via a Web App integration.
Inputs: result (required), web_app_query_id (required).
approve_chat_join_requestB
Approve a user's join request to a chat.
Inputs: user_id (required), chat_id.
approve_suggested_postC
Approve a suggested post.
Inputs: message_id (required), chat_id.
ban_chat_memberB
Ban a user from a chat. If chat_id is omitted, targets the default log group.
Inputs: user_id (required), chat_id, until_date, revoke_messages.
ban_chat_sender_chatA
Ban a channel chat in a supergroup or channel. The owner of the sender chat won't be able to send messages on behalf of their chat.
Inputs: sender_chat_id (required), chat_id.
close_botA
Close the bot instance (can be restarted later).
Inputs: no named parameters.
copy_messageB
Copy a message from one chat to another. Can copy any message type. If chat_id is omitted, copies to the default log group.
Inputs: message_id (required), from_chat_id (required), caption, chat_id, +8 more.
copy_messagesB
Copy multiple messages from one chat to another.
Inputs: message_ids (required), from_chat_id (required), chat_id, remove_caption, +3 more.
create_chat_invite_linkA
Create a new invite link for a chat. If chat_id is omitted, targets the default log group.
Inputs: name, chat_id, expire_date, member_limit, +1 more.
create_chat_subscription_invite_linkB
Create a subscription invite link for a channel chat.
Inputs: subscription_price (required), subscription_period (required), name, chat_id.
decline_chat_join_requestB
Decline a user's join request to a chat.
Inputs: user_id (required), chat_id.
decline_suggested_postC
Decline a suggested post.
Inputs: message_id (required), chat_id.
delete_chat_photoA
Delete the chat profile photo. If chat_id is omitted, targets the default log group.
Inputs: chat_id.
delete_messageA
Delete a message from a chat. Bot must have delete permissions. If chat_id is omitted, targets the default log group.
Inputs: message_id (required), chat_id.
delete_messagesB
Delete multiple messages in a chat (up to 100 at once).
Inputs: message_ids (required), chat_id.
delete_my_commandsB
Delete the bot's commands for the given scope.
Inputs: scope, language_code.
edit_business_message_captionB
Edit caption of a media message sent on behalf of a business account.
Inputs: caption (required), chat_id (required), message_id (required), business_connection_id (required), +2 more.
edit_business_message_mediaB
Edit media content of a message sent on behalf of a business account.
Inputs: media (required), chat_id (required), message_id (required), business_connection_id (required), +1 more.
edit_business_message_textB
Edit a text message sent on behalf of a business account.
Inputs: text (required), chat_id (required), message_id (required), business_connection_id (required), +2 more.
edit_chat_invite_linkB
Edit an existing invite link for a chat. If chat_id is omitted, targets the default log group.
Inputs: invite_link (required), name, chat_id, expire_date, +2 more.
edit_chat_subscription_invite_linkC
Edit a subscription invite link.
Inputs: invite_link (required), name, chat_id.
edit_messageB
Edit a previously sent text message. If chat_id is omitted, targets the default log group.
Inputs: text (required), chat_id, entities, message_id, +4 more.
edit_message_captionA
Edit caption of a previously sent message with media. If chat_id is omitted, targets the default log group.
Inputs: caption, chat_id, message_id, parse_mode, +3 more.
edit_message_checklistC
Edit a checklist message.
Inputs: checklist (required), chat_id, message_id, reply_markup, +1 more.
edit_message_live_locationA
Edit a live location message. The location must be live (sent with live_period). If chat_id is omitted, targets the default log group.
Inputs: latitude (required), longitude (required), chat_id, heading, +5 more.
edit_message_mediaB
Edit media content of a previously sent message. Pass a JSON string as media parameter with InputMedia object.
Inputs: media (required), chat_id, message_id, reply_markup, +1 more.
edit_message_reply_markupA
Edit only the reply markup (inline keyboard) of a previously sent message. If chat_id is omitted, targets the default log group.
Inputs: chat_id, message_id, reply_markup, inline_message_id.
export_chat_invite_linkB
Export the primary invite link for a chat. If chat_id is omitted, targets the default log group.
Inputs: chat_id.
forward_messageC
Forward a message from one chat to another. If chat_id is omitted, forwards to the default log group.
Inputs: message_id (required), from_chat_id (required), chat_id, protect_content, +2 more.
forward_messagesB
Forward multiple messages from one chat to another.
Inputs: message_ids (required), from_chat_id (required), chat_id, protect_content, +2 more.
get_business_connectionC
Get info about a business connection.
Inputs: business_connection_id (required).
get_chat_administratorsB
Get a list of administrators in a chat. If chat_id is omitted, targets the default log group.
Inputs: chat_id.
get_chat_infoA
Get info about a chat (title, type, members count, description, etc). If chat_id is omitted, returns info about the default log group.
Inputs: chat_id.
get_chat_memberA
Get information about a member of a chat. If chat_id is omitted, targets the default log group.
Inputs: user_id (required), chat_id.
get_chat_member_countA
Get the number of members in a chat. If chat_id is omitted, targets the default log group.
Inputs: chat_id.
get_fileA
Get information about a file stored on Telegram servers. Returns file path for downloading.
Inputs: file_id (required).
get_meA
Get info about the bot (username, name, id). Use to verify the bot is working.
Inputs: no named parameters.
get_my_commandsC
Get the current list of bot commands.
Inputs: scope, language_code.
get_my_default_administrator_rightsB
Get the bot's default administrator rights.
Inputs: for_channels.
get_my_descriptionB
Get the current bot description.
Inputs: language_code.
get_my_nameB
Get the current bot name.
Inputs: language_code.
get_my_short_descriptionB
Get the current bot short description.
Inputs: language_code.
get_updatesB
Get recent incoming messages and updates. Returns latest messages sent to the bot.
Inputs: limit, offset, timeout, allowed_updates.
get_user_chat_boostsB
Get boosts added by a user to a chat.
Inputs: user_id (required), chat_id.
get_user_profile_audiosB
Get audios added to a user's profile.
Inputs: user_id (required), limit, offset.
get_user_profile_photosB
Get a user's profile pictures.
Inputs: user_id (required), limit, offset.
leave_chatA
Leave a chat. The bot will no longer receive updates from this chat.
Inputs: chat_id (required).
log_outB
Log out the bot from Telegram Bot API.
Inputs: no named parameters.
pin_messageA
Pin a message in a chat. Bot must have pin permissions. If chat_id is omitted, targets the default log group.
Inputs: message_id (required), chat_id, disable_notification.
promote_chat_memberA
Promote a user to admin in a chat. If chat_id is omitted, targets the default log group.
Inputs: user_id (required), chat_id, is_anonymous, can_change_info, +10 more.
remove_chat_verificationB
Remove verification from a chat.
Inputs: chat_id.
remove_user_verificationB
Remove verification from a user.
Inputs: user_id (required).
restrict_chat_memberB
Restrict a user's permissions in a chat. If chat_id is omitted, targets the default log group.
Inputs: user_id (required), permissions (required), chat_id, until_date, +1 more.
revoke_chat_invite_linkB
Revoke an invite link for a chat. If chat_id is omitted, targets the default log group.
Inputs: invite_link (required), chat_id.
send_animationA
Send an animation (GIF) to a Telegram chat. Can send from URL or local file path. If chat_id is omitted, sends to the default log group.
Inputs: animation (required), width, height, caption, +11 more.
send_audioB
Send an audio file to a Telegram chat. Can send from URL or local file path. If chat_id is omitted, sends to the default log group.
Inputs: audio (required), title, caption, chat_id, +9 more.
send_business_messageA
Send a text message on behalf of a business account. Requires business_connection_id.
Inputs: text (required), chat_id (required), business_connection_id (required), parse_mode, +1 more.
send_chat_actionB
Send a chat action (typing, upload_photo, etc.) to show the bot is doing something.
Inputs: action (required), chat_id, message_thread_id.
send_checklistB
Send a checklist message to a chat.
Inputs: checklist (required), chat_id, protect_content, reply_parameters, +2 more.
send_contactB
Send a contact to a chat. If chat_id is omitted, sends to the default log group.
Inputs: first_name (required), phone_number (required), vcard, chat_id, +6 more.
send_diceB
Send a dice roll animation to a chat. If chat_id is omitted, sends to the default log group.
Inputs: emoji, chat_id, reply_markup, protect_content, +3 more.
send_documentA
Send a file/document to a Telegram chat. Can send from URL, file_id or local file path. If chat_id is omitted, sends to the default log group.
Inputs: document (required), caption, chat_id, parse_mode, +7 more.
send_locationA
Send a location point to a Telegram chat. If chat_id is omitted, sends to the default log group.
Inputs: latitude (required), longitude (required), chat_id, heading, +8 more.
send_media_groupA
Send a group of photos or videos as an album. If chat_id is omitted, sends to the default log group.
Inputs: media (required), chat_id, protect_content, reply_parameters, +2 more.
send_messageA
Send a text message to a Telegram chat. Supports Markdown and HTML formatting. If chat_id is omitted, sends to the default log group.
Inputs: text (required), chat_id, entities, parse_mode, +6 more.
send_message_draftC
Send a draft message that can be updated progressively.
Inputs: text, chat_id, entities, parse_mode, +3 more.
send_paid_mediaC
Send paid media to a chat.
Inputs: media (required), star_count (required), caption, chat_id, +7 more.
send_photoB
Send a photo to a Telegram chat. Can send from URL or local file path. If chat_id is omitted, sends to the default log group.
Inputs: photo (required), caption, chat_id, parse_mode, +8 more.
send_pollB
Send a poll to a Telegram chat. If chat_id is omitted, sends to the default log group.
Inputs: options (required), question (required), type, chat_id, +16 more.
send_stickerA
Send a sticker to a Telegram chat. Can send from URL, file_id or local file path. If chat_id is omitted, sends to the default log group.
Inputs: sticker (required), emoji, chat_id, reply_markup, +4 more.
send_venueB
Send a venue location to a Telegram chat. If chat_id is omitted, sends to the default log group.
Inputs: title (required), address (required), latitude (required), longitude (required), +10 more.
send_videoB
Send a video to a Telegram chat. Can send from URL or local file path. If chat_id is omitted, sends to the default log group.
Inputs: video (required), width, height, caption, +12 more.
send_video_noteA
Send a video note (round video message) to a Telegram chat. Can send from URL or local file path. If chat_id is omitted, sends to the default log group.
Inputs: video_note (required), length, chat_id, duration, +5 more.
send_voiceA
Send a voice message to a Telegram chat. Can send from URL or local file path. If chat_id is omitted, sends to the default log group.
Inputs: voice (required), caption, chat_id, duration, +7 more.
set_chat_administrator_custom_titleB
Set a custom title for an admin in a chat. If chat_id is omitted, targets the default log group.
Inputs: user_id (required), custom_title (required), chat_id.
set_chat_descriptionA
Set a new description for a chat. If chat_id is omitted, targets the default log group.
Inputs: description (required), chat_id.
set_chat_member_tagB
Set a tag for a chat member.
Inputs: user_id (required), tag, chat_id.
set_chat_permissionsB
Set default chat permissions for all members. If chat_id is omitted, targets the default log group.
Inputs: permissions (required), chat_id, use_independent_chat_permissions.
set_chat_photoA
Set a new profile photo for a chat. If chat_id is omitted, targets the default log group.
Inputs: photo (required), chat_id.
set_chat_titleA
Set a new title for a chat. If chat_id is omitted, targets the default log group.
Inputs: title (required), chat_id.
set_message_reactionB
Set a reaction on a message.
Inputs: message_id (required), is_big, chat_id, reaction.
set_my_commandsB
Set the bot's commands for the given scope.
Inputs: commands (required), scope, language_code.
set_my_default_administrator_rightsB
Set the bot's default administrator rights.
Inputs: rights, for_channels.
set_my_descriptionB
Set the bot description (max 512 chars).
Inputs: description, language_code.
set_my_nameA
Set the bot name (max 64 chars). Empty string removes the name.
Inputs: name, language_code.
set_my_short_descriptionA
Set the bot short description (max 120 chars).
Inputs: language_code, short_description.
set_passport_data_errorsB
Report errors in Telegram Passport data.
Inputs: errors (required), user_id (required).
stop_message_live_locationA
Stop updating a live location message. If chat_id is omitted, targets the default log group.
Inputs: chat_id, message_id, reply_markup, inline_message_id.
stop_pollA
Stop a poll and mark it as closed. If chat_id is omitted, targets the default log group.
Inputs: message_id (required), chat_id, reply_markup.
unban_chat_memberC
Unban a previously banned user in a chat. If chat_id is omitted, targets the default log group.
Inputs: user_id (required), chat_id, only_if_banned.
unban_chat_sender_chatC
Unban a previously banned channel chat in a supergroup or channel.
Inputs: sender_chat_id (required), chat_id.
unpin_all_chat_messagesA
Unpin all messages in a chat. If chat_id is omitted, targets the default log group.
Inputs: chat_id.
unpin_all_general_forum_topic_messagesB
Unpin all messages in the General forum topic.
Inputs: chat_id.
unpin_messageA
Unpin a message in a chat. If message_id is not specified, unpin the last pinned message. If chat_id is omitted, targets the default log group.
Inputs: chat_id, message_id.
verify_chatB
Verify a chat on behalf of the bot.
Inputs: chat_id, custom_description.
verify_userC
Verify a user on behalf of the bot.
Inputs: user_id (required), custom_description.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 100 tools
While many tools are distinct (send_photo vs send_document), there is notable overlap in message editing and business message editing (edit_message vs edit_business_message_text) and sending (send_message vs send_business_message). Some tools like get_my_short_description and set_my_short_description are clear, but the number of similar send_* and edit_* variants may cause an agent to pick the wrong one without careful reading.
The naming is predominantly verb_noun (send_message, get_chat_info, edit_message), which is consistent. Minor deviations exist: 'log_out' vs 'logout', 'get_me' vs 'get_my_commands', and plural/singular variations (delete_messages vs delete_message) are understandable. Overall pattern is predictable.
With 100 tools, the server is extremely heavy, far exceeding the typical 3-15 well-scoped tools. Most are direct wrappers of the Telegram Bot API, leading to a very large surface that may overwhelm agents. While each tool is simple, the sheer count makes it hard to navigate and select the right one.
The tool set covers the full Telegram Bot API lifecycle: sending all media types, editing, deleting, chat management (ban, restrict, invite links), bot configuration (set_my_*), and updates (get_updates). It is comprehensive, with no obvious missing core operations such as getting updates or deleting messages, which are all present.
Maintenance
Related MCP Connectors
Multi-tenant Telegram gateway for AI agents — HTTP+stdio, 8 tools, MTProto User API
Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.
Email inboxes, webhook URLs, mock APIs and 170+ tools for coding agents over one MCP connection.
Hosted Telegram MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that wraps the Telegram Bot API into semantic tools for LLM agents, supporting multi-bot management for sending and receiving messages. It enables agents to send text, photos, and documents, as well as fetch recent updates from multiple configured Telegram bots.MIT
- AlicenseNot gradedqualityAmaintenanceProduction-grade MCP server for Telegram with dual-mode Bot API and MTProto. 6 composite tools covering messages, chats, media, contacts management with 3-tier token optimization.303 PyPI12Apache 2.0
- AlicenseCqualityCmaintenanceUltimate MCP server for Telegram Bot API — 169 methods, full v9.6 coverage, meta-mode, rate limiting, and circuit breaker, enabling AI to control Telegram bots with natural language.10034MIT
- AlicenseAqualityDmaintenanceAn MCP server that lets an LLM send messages, photos, and documents to Telegram through a bot. Provides four tools: get_me, send_message, send_photo, and send_document.4MIT