Skip to main content
Glama
telegram-bot-mcp

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 install

Claude Code

claude mcp add -e TELEGRAM_BOT_TOKEN=your_token telegram -- node /path/to/mcp-telegram/index.js

Claude 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

TELEGRAM_BOT_TOKEN

Yes

Bot token from @BotFather

TELEGRAM_DEFAULT_CHAT_ID

No

Default chat ID (skip chat_id in tool calls)

TELEGRAM_DEFAULT_THREAD_ID

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.js

License

MIT

Available Tools

100 tools
answer_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.

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_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.

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_chat_menu_buttonA

Get the current menu button for a private chat or default.

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.

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_menu_buttonC

Set the menu button for a private chat or all chats.

Inputs: menu_button (required), 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

    B3/5.0

    Scored across 100 tools

    Disambiguation3/5

    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.

    Naming Consistency4/5

    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.

    Tool Count2/5

    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.

    Completeness5/5

    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

    ActivityInactive
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      An 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
    • A
      license
      Not graded
      quality
      A
      maintenance
      Production-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 PyPI
      12
      Apache 2.0
    • A
      license
      C
      quality
      C
      maintenance
      Ultimate 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.
      100
      34
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      An 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.
      4
      MIT