
telegram-mcp (chigwell): community Telegram MCP server
Lets your AI assistant read, search and send Telegram messages as you, using your own account rather than a bot.
This is a community server, not made by Telegram, and it is the most widely used way to connect Telegram to Claude, Cursor or Codex. It signs in as your own Telegram account, so your assistant can read your chats, search messages, and send, edit or delete messages as you. That reach is the thing to know first: it works on your whole account, and Telegram can limit accounts that behave like bots. Turn on its read-only mode unless you need it to send.
Good for
- Busy Telegram users who want unread chats summarized and replies drafted
- Community and group admins who manage members, invites, bans and topics
- Researchers who search and analyze long chat or channel histories
- Developers who want Claude Code or Codex to post updates to a Telegram chat
- People comfortable running a Python project on their own computer
Works in
4 supported · 8 should work
Tap an app to see how to set it up and any known problems.
The README covers it: run the server in its shared web mode, then add its local address to Claude Code.
Known problems
- Closed
Cancelling a tool call left every later call hanging until a restart
Reported Oct 2026 · GitHub
The README covers it: pack the project as a Claude Desktop extension and fill in your API ID, hash and session string. GitHub
The README covers it: point Cursor at your downloaded copy and add your Telegram credentials. GitHub
The README covers it: run the server in its shared web mode, then add its local address to Codex. GitHub
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Client does not support this transport.
Client does not support this transport.
Install telegram MCP
Claude Code
- 1
Copy this prompt.
Add the telegram MCP server to Claude Code. Run this command: claude mcp add --transport http telegram http://127.0.0.1:8765/mcp Then check that it loaded and tell me if I need to sign in or restart.
- 2
Paste it into Claude Code. It shows the change and asks before running it.
Requires Python 3.10+ and uv, Telegram API ID and hash from my.telegram.org/apps, A session string from the project's generator.
Read-only mode: Want it to only read? Set TELEGRAM_EXPOSED_TOOLS=read-only before you start the server.
First, get the code and a login: git clone https://github.com/chigwell/telegram-mcp.git, then cd telegram-mcp, uv sync and uv run session_string_generator.py (add --qr to log in by scanning from your phone). Do not install with pip or uvx: the PyPI package of that name is a different project. The shared server holds one Telegram connection for all your apps, which Telegram tolerates better than many parallel logins. An unconfirmed report says other websites could trigger actions through the shared mode; until it is resolved, the Local (uv) option avoids it, at the cost of one Telegram login per app.
From the project README. Source.
Tools
Lists your Telegram chats with basic details
Shows your chats, groups and channels with basic details such as name and type.
Try: “Show my most recent Telegram chats”
Network ·
list_chatsLists your chats a page at a time
Returns your chats in pages, so a long chat list can be read in pieces.
Try: “Show the first 20 of my Telegram chats”
Network ·
get_chatsShows details about one chat
Returns detailed information about a single chat, group or channel.
Try: “Give me the details of my chat with the design team”
Network ·
get_chatShows a group or channel's full info, including its description
Returns the full details of a group or channel, including its About text.
Try: “What is the description of the Python Jobs channel?”
Network ·
get_full_chatReads recent messages from a chat
Returns messages from a chat, a page at a time. In forum groups each message shows which topic it belongs to.
Try: “Show the latest messages in my family group chat”
Network ·
get_messagesFinds messages in a chat using filters
Retrieves messages from a chat with optional filters to narrow them down.
Try: “List messages in the project chat from last week”
Network ·
list_messagesReads a chat's history, up to a limit you choose
Returns the chat history up to a set number of messages.
Try: “Read the last 200 messages in the book club group”
Network ·
get_historyShows the messages around one message
Returns the messages just before and after a given message so you can see what was being discussed.
Try: “Show what was said around that message about the invoice”
Network ·
get_message_contextSearches one chat for messages containing some text
Looks through a single chat for messages that match the text you give.
Try: “Find messages in the team chat that mention the budget”
Network ·
search_messagesSearches all your chats for some text
Searches the text of messages across every chat on your account.
Try: “Search all my Telegram chats for the flight confirmation”
Network ·
search_globalShows the pinned messages in a chat
Returns every pinned message in a chat.
Try: “What messages are pinned in the announcements channel?”
Network ·
get_pinned_messagesSends a message from your account
Sends a message to a chat as you. It supports plain text, HTML or Markdown formatting, date chips and custom emoji.
Try: “Send Anna a message saying I will be 10 minutes late”
Write ·
send_messageReplies to a specific message
Sends a reply to one particular message in a chat, as you.
Try: “Reply to Tom's last message with: sounds good”
Write ·
reply_to_messageSchedules a message to send later
Queues a message to be sent to a chat at a future time you choose.
Try: “Schedule a message to Mom for tomorrow 9am saying happy birthday”
Write ·
send_scheduled_messageForwards a message to another chat
Forwards one message, or several, from one chat to another.
Try: “Forward that message from the news channel to my sister”
Write ·
forward_messageForwards a batch of messages in one go
Forwards a group of messages from a source chat to a destination chat in a single call.
Try: “Forward these five messages from the project chat to Sam”
Write ·
forward_messagesEdits a message you sent
Changes the text of a message you already sent. Formatting and custom emoji are supported.
Try: “Edit my last message to fix the typo in the time”
Write ·
edit_messageDeletes a message
Deletes one message by its ID. If the message does not belong to the chat given, nothing is deleted.
Try: “Delete the message I just sent in the family chat”
Delete ·
delete_messageDeletes several messages at once
Deletes many messages in one call. If any ID is not from that chat, nothing is deleted.
Try: “Delete these three messages from the group”
Delete ·
delete_messages_bulkClears a chat's whole message history
Clears all of the messages in a chat.
Try: “Clear the history of my chat with the old support bot”
Delete ·
delete_chat_historyReacts to a message with an emoji
Adds a reaction to a message as you.
Try: “React with a thumbs up to Lisa's last message”
Write ·
send_reactionRemoves your reaction from a message
Takes back the reaction you left on a message.
Try: “Remove my reaction from that message”
Delete ·
remove_reactionShows the reactions on a message
Lists the reactions a message has received.
Try: “Who reacted to my last post in the channel?”
Network ·
get_message_reactionsCreates a poll in a chat
Posts a Telegram poll to a chat using the native poll feature.
Try: “Create a poll in the team chat asking where to eat lunch”
Write ·
create_pollVotes in a poll
Casts your vote in an existing poll, replacing your current vote if the poll allows it.
Try: “Vote for the second option in the lunch poll”
Write ·
vote_pollPins a message in a chat
Pins a message so it stays at the top of the chat.
Try: “Pin the meeting details message in the team chat”
Write ·
pin_messageUnpins a message
Removes a single pinned message from a chat.
Try: “Unpin the old schedule message”
Write ·
unpin_messageUnpins every pinned message in a chat
Removes all pinned messages from a chat.
Try: “Unpin everything in the announcements group”
Write ·
unpin_all_messagesMarks a chat as read
Marks all messages in a chat as read.
Try: “Mark my chat with Dan as read”
Write ·
mark_as_readSaves unread messages from chats to a file
Collects the unread messages from one or more chats and writes them to a JSON file.
Try: “Export my unread messages from the work chats to a file”
Write ·
export_unread_messagesSaves a draft message in a chat
Stores a draft in a chat so it appears in the message box next time you open Telegram.
Try: “Save a draft to Anna saying thanks for dinner”
Write ·
save_draftLists your unsent drafts
Returns all draft messages across your chats, with the chat each belongs to.
Try: “Which Telegram drafts do I have waiting?”
Network ·
get_draftsRemoves a draft from a chat
Clears the saved draft in one chat.
Try: “Clear the draft in my chat with Tom”
Delete ·
clear_draftLists messages waiting to be sent in a chat
Returns the scheduled messages that are still pending in a chat.
Try: “What messages do I have scheduled in the family chat?”
Network ·
get_scheduled_messagesCancels scheduled messages
Deletes one or more scheduled messages from a chat before they are sent.
Try: “Cancel the scheduled message to Mom”
Delete ·
delete_scheduled_messageGets a shareable link to a message
Creates a t.me link that points to a specific message.
Try: “Get me a link to that message in the channel”
Network ·
get_message_linkShows who has read a message
Lists the user IDs of people who have read a given message.
Try: “Who has read my last message in the group?”
Network ·
get_message_read_byTurns a voice message into text
Transcribes a voice message or video note into written text.
Try: “Transcribe the voice message Carl just sent me”
Network ·
transcribe_voicePresses a button on a bot's message
Presses a callback or game button under a message and returns the bot's answer.
Try: “Press the Confirm button on the bot's last message”
Write ·
press_inline_buttonFinds contacts by name, username or phone
Searches your contacts by name, username or phone number. Saved nicknames are also matched.
Try: “Find my contact named Priya”
Network ·
search_contactsLists all your contacts
Returns every contact in your Telegram account.
Try: “Show me all my Telegram contacts”
Network ·
list_contactsFinds your private chat with a contact
Locates the one-to-one chat with a contact by name, username or phone.
Try: “Open my chat with Marcus”
Network ·
get_direct_chat_by_contactLists the chats that involve a contact
Returns all chats connected to a specific contact.
Try: “Which chats do I share with Marcus?”
Network ·
get_contact_chatsShows the latest message with a contact
Returns the most recent message between you and a contact.
Try: “When did I last talk to Priya and what was said?”
Network ·
get_last_interactionLists the groups you share with someone
Returns the chats you have in common with a specific user.
Try: “Which groups am I in with Marcus?”
Network ·
get_common_chatsAdds a new contact
Adds a person to your contacts using their phone number and name.
Try: “Add Jane Smith, +15551234567, to my contacts”
Write ·
add_contactRemoves a contact
Deletes a contact from your Telegram account.
Try: “Delete Jane Smith from my contacts”
Delete ·
delete_contactBlocks a user
Blocks a person so they cannot contact you.
Try: “Block the user @spambot123”
Write ·
block_userUnblocks a user
Lifts the block on a person you blocked earlier.
Try: “Unblock @spambot123”
Write ·
unblock_userLists users you have blocked
Returns the people you currently have blocked.
Try: “Who have I blocked on Telegram?”
Network ·
get_blocked_usersSends a contact card to a chat
Shares a contact, with phone number and name, in a chat as you.
Try: “Send Jane's contact details to Tom”
Write ·
send_contactAdds many contacts at once
Imports a list of contacts, each with a phone number and name.
Try: “Import these five contacts into my Telegram”
Write ·
import_contactsExports all your contacts as JSON
Returns all of your contacts as a JSON text.
Try: “Export my Telegram contacts”
Network ·
export_contactsRemembers a nickname for a person
Saves what you call someone so other requests can recognise that nickname when you mention a chat.
Try: “Remember that Mom means my contact Susan Lee”
Write ·
set_contact_aliasLists the nicknames you saved
Shows the remembered contacts, one row per person with all of their nicknames.
Try: “What nicknames have I saved for contacts?”
Network ·
list_contact_aliasesForgets one saved nickname
Removes one remembered nickname. It must match exactly.
Try: “Forget the nickname Mom”
Delete ·
delete_contact_aliasShows a person's full profile
Returns a user's full profile, including bio, personal channel link and other details.
Try: “Show the full profile of @janesmith”
Network ·
get_full_userShows whether a user is online
Returns the online status of a user.
Try: “Is Marcus online right now?”
Network ·
get_user_statusLists a user's profile photos
Returns the profile photos of a user.
Try: “Show Jane's profile photos”
Network ·
get_user_photosShows information about a bot
Looks up a bot by its username and returns its details.
Try: “Tell me about the bot @examplebot”
Network ·
get_bot_infoSearches public chats, channels and bots
Searches for public chats, channels or bots by username or title.
Try: “Search for public Telegram channels about astronomy”
Network ·
search_public_chatsJoins a public channel or group
Joins a public channel or supergroup by username or ID.
Try: “Join the public channel @spacenews”
Write ·
subscribe_public_channelSends a file from your computer to a chat
Sends a local file to a chat as you, with an optional caption.
Try: “Send report.pdf from my Downloads folder to Anna”
Write ·
send_fileSends several photos or videos as one album
Sends multiple photos or videos together as one album, with a caption formatted the same way as for a file.
Try: “Send these three photos to the family group as an album”
Write ·
send_albumSends a voice message
Sends a voice note to a chat. The file must be in OGG/OPUS format.
Try: “Send this voice note to Sam”
Write ·
send_voiceSends a sticker
Sends a sticker to a chat. The file must be a valid .webp sticker.
Try: “Send this sticker to Anna”
Write ·
send_stickerSends a GIF
Sends a GIF to a chat using the GIF's Telegram document ID.
Try: “Send that cat GIF to Tom”
Write ·
send_gifSearches for GIFs
Searches for GIFs by keyword and returns their Telegram document IDs.
Try: “Find a GIF of a dancing cat”
Network ·
get_gif_searchLists your sticker sets
Returns all of the sticker sets available to you.
Try: “What sticker sets do I have?”
Network ·
get_sticker_setsDownloads a photo, video or file from a message
Saves the media attached to a message to your computer.
Try: “Download the file Anna sent me in our chat”
Write ·
download_mediaUploads a local file to Telegram
Uploads a file from your computer to Telegram and returns details about the upload.
Try: “Upload report.pdf to Telegram”
Write ·
upload_fileShows details about media in a message
Returns information about the media attached to a message.
Try: “What kind of file is attached to that message?”
Network ·
get_media_infoReads the contents of a document or image in a message
Opens a document, PDF or image from a message and reads it in memory without saving it to disk.
Try: “Read the PDF Anna sent and summarise it”
Network ·
inspect_documentLists a chat's or user's photos as text
Indexes the photos of a chat or user as text without transferring any image.
Try: “List the photos in the family group”
Network ·
list_photosShows one photo at full size
Shows a single photo from a chat or user at full resolution.
Try: “Open the third photo in the trip group”
Network ·
open_photoShows many photos as one collage
Shows several photos from a chat or user as one labelled collage.
Try: “Show me a collage of the photos in the trip group”
Network ·
get_photo_sheetBrowses or searches custom emoji packs
Lists installed or featured custom emoji packs, or searches packs by keyword.
Try: “Find custom emoji packs about cats”
Network ·
get_custom_emoji_packsShows the emoji in one custom pack
Opens a custom emoji pack by short name or link and lists its emoji.
Try: “Show the emoji in this pack: t.me/addemoji/example”
Network ·
get_custom_emoji_packPreviews a custom emoji
Previews or downloads a custom emoji by its Telegram ID.
Try: “Preview this custom emoji”
Write ·
preview_custom_emojiLists the members of a group or channel
Returns the participants of a group or channel, a page at a time.
Try: “Who is in the hiking group?”
Network ·
get_participantsLists the admins of a group or channel
Returns all admins in a group or channel.
Try: “Who are the admins of this channel?”
Network ·
get_adminsShows one member's role and admin rights
Returns a member's role, rank and full set of admin rights in a supergroup or channel.
Try: “What admin rights does Dan have in the dev group?”
Network ·
get_member_admin_statusLists banned users in a group
Returns everyone who is banned from a group or channel.
Try: “Who is banned from the dev group?”
Network ·
get_banned_usersShows the recent admin log of a group
Returns the latest admin actions recorded in a group or channel.
Try: “What did admins do recently in the dev group?”
Network ·
get_recent_actionsCreates a new group
Creates a new group or supergroup and adds the users you name.
Try: “Create a group called Weekend Trip with Anna and Tom”
Write ·
create_groupCreates a new channel or supergroup
Creates a new channel or supergroup.
Try: “Create a channel called Team Updates”
Write ·
create_channelInvites people to a group or channel
Adds users to a group or channel.
Try: “Invite Anna to the hiking group”
Write ·
invite_to_groupLeaves a group or channel
Makes your account leave a group or channel.
Try: “Leave the old college group”
Delete ·
leave_chatJoins a chat from an invite link
Joins a chat using an invite link.
Try: “Join this group: t.me/+abc123”
Write ·
join_chat_by_linkJoins a chat from an invite code
Joins a chat using the hash part of an invite link.
Try: “Join the chat with this invite code”
Write ·
import_chat_inviteGets the invite link for a group or channel
Returns the invite link of a group or channel.
Try: “Get the invite link for the hiking group”
Write ·
get_invite_linkCreates an invite link for a chat
Exports an invite link for a group or channel.
Try: “Make an invite link for the dev group”
Write ·
export_chat_inviteRenames a group or channel
Changes the title of a chat, group or channel.
Try: “Rename the hiking group to Mountain Crew”
Write ·
edit_chat_titleChanges a group's description
Edits the About text of a chat, group or channel.
Try: “Update the channel description to say we post weekly news”
Write ·
edit_chat_aboutChanges a group's picture
Sets a new photo for a chat, group or channel from an image file.
Try: “Set this image as the hiking group's photo”
Write ·
edit_chat_photoRemoves a group's picture
Deletes the photo of a chat, group or channel.
Try: “Remove the hiking group's photo”
Delete ·
delete_chat_photoUpgrades a basic group to a supergroup
Turns a basic group into a supergroup.
Try: “Upgrade the hiking group to a supergroup”
Write ·
upgrade_group_to_supergroupMakes someone an admin
Promotes a user to admin in a group or channel.
Try: “Make Dan an admin of the dev group”
Write ·
promote_adminRemoves someone's admin role
Demotes an admin back to a regular member in a group or channel.
Try: “Remove Dan as admin of the dev group”
Write ·
demote_adminSets exactly what an admin can do
Sets detailed admin rights for a user in a supergroup or channel.
Try: “Let Dan pin messages but not ban users”
Write ·
edit_admin_rightsBans a user from a group
Bans a user from a group or channel.
Try: “Ban @spammer from the dev group”
Delete ·
ban_userLets a banned user back in
Lifts a ban on a user in a group or channel.
Try: “Unban @spammer from the dev group”
Write ·
unban_userRemoves a user without banning them
Removes a user from a group or channel without banning them, so they can rejoin.
Try: “Remove Tom from the hiking group but don't ban him”
Delete ·
remove_userSets what members can do by default
Sets the default permissions for members of a group, supergroup or channel.
Try: “Stop members of the group from sending stickers”
Write ·
set_default_chat_permissionsTurns slow mode on or off
Enables or disables slow mode in a supergroup.
Try: “Turn on slow mode in the dev group”
Write ·
toggle_slow_modeMutes a chat
Turns off notifications for a chat.
Try: “Mute the noisy sales group”
Write ·
mute_chatUnmutes a chat
Turns notifications back on for a chat.
Try: “Unmute the family group”
Write ·
unmute_chatArchives a chat
Moves a chat into your archive.
Try: “Archive my chat with the old landlord”
Write ·
archive_chatBrings a chat back from the archive
Moves an archived chat back to your main list.
Try: “Unarchive the project chat”
Write ·
unarchive_chatLists your chat folders
Returns all of your chat folders with their IDs, names and emoji.
Try: “What chat folders do I have?”
Network ·
list_foldersShows what is in one folder
Returns details of a folder, including all the chats it contains.
Try: “Which chats are in my Work folder?”
Network ·
get_folderShows all folder definitions and their order
Returns the full definition and order of all your folders, without chat content.
Try: “Give me an overview of how my folders are set up”
Network ·
get_folder_snapshotPreviews a shared folder link
Shows what a shared folder invite contains without joining it.
Try: “What is in this shared folder: t.me/addlist/abc?”
Network ·
get_chatlist_inviteCreates a chat folder
Creates a new folder for your chats.
Try: “Create a folder called Family”
Write ·
create_folderChanges an existing folder
Updates a private folder by ID and leaves any field you did not mention as it was.
Try: “Rename my Work folder to Office”
Write ·
update_folderPuts a chat in a folder
Adds a chat to an existing folder.
Try: “Add the dev group to my Work folder”
Write ·
add_chat_to_folderTakes a chat out of a folder
Removes a chat from a folder.
Try: “Remove the dev group from my Work folder”
Write ·
remove_chat_from_folderChanges the order of your folders
Rearranges the folders in your folder list.
Try: “Move my Family folder to the top”
Write ·
reorder_foldersDeletes a folder
Deletes a folder. The chats in it are kept.
Try: “Delete my Old Projects folder”
Delete ·
delete_folderShows your own account details
Returns information about the account you are signed in as.
Try: “Who am I logged in as on Telegram?”
Network ·
get_meChanges your name or bio
Updates your profile name and bio.
Try: “Change my Telegram bio to Product designer in Berlin”
Write ·
update_profileSets your profile picture
Sets a new profile photo from an image file.
Try: “Use this image as my Telegram profile photo”
Write ·
set_profile_photoRemoves your profile picture
Deletes your current profile photo.
Try: “Remove my Telegram profile photo”
Delete ·
delete_profile_photoShows your last seen privacy setting
Returns your privacy settings for last seen status.
Try: “Who can see when I was last online?”
Network ·
get_privacy_settingsAdds exceptions to a privacy setting
Adds per-user exceptions to a privacy setting such as last seen, phone number or profile photo.
Try: “Let Anna see my last seen even though it is hidden”
Write ·
set_privacy_settingsChooses who you post as in a supergroup
Saves which identity your account posts as in a supergroup.
Try: “Post as my channel in the discussion group from now on”
Write ·
set_default_send_asLists who you can post as in a chat
Lists the identities Telegram lets you post as in a given chat, where supported.
Try: “Who can I post as in this supergroup?”
Network ·
get_send_asSets the command list of a bot you own
Sets bot commands for a bot you own. It only works when the client is signed in as a bot account.
Try: “Set the commands for my bot”
Write ·
set_bot_commandsLists topics in a forum group
Returns the forum topics of a supergroup that has topics turned on.
Try: “What topics are in the community forum group?”
Network ·
list_topicsCreates a topic in a forum group
Creates a new topic in a supergroup with topics enabled.
Try: “Create a topic called Announcements in the community group”
Write ·
create_forum_topicEdits a forum topic
Changes a forum topic. Only the fields you give are changed.
Try: “Rename the General Chat topic to Lounge”
Write ·
edit_forum_topicDeletes a forum topic and its messages
Deletes a forum topic together with all of its messages. This cannot be undone.
Try: “Delete the Old Ideas topic from the community group”
Delete ·
delete_forum_topicTurns on topics for a supergroup
Enables forum topics in a supergroup.
Try: “Turn on topics in the community group”
Write ·
enable_forum_topicsUsed by the assistant behind the scenes
Lists the emoji allowed as topic icons
Lists the custom emoji Telegram allows as forum topic icons.
Network ·
list_forum_topic_iconsLooks up the ID behind a username
Turns a username into a user or chat ID.
Network ·
resolve_usernameLists the buttons under a message
Lists the buttons on a message, with their position and kind, so one can be pressed.
Network ·
list_inline_buttonsShows the typing indicator in a chat
Shows the typing indicator in a chat for a few seconds, then clears it.
Write ·
send_typingLists the IDs of all your contacts
Returns the IDs of all contacts in your account.
Network ·
get_contact_idsShows your folder and pin limits
Reads the folder, chat and pin limits that apply to your account.
Network ·
get_folder_limitsLists the Telegram accounts set up
Lists the configured Telegram accounts with their profile info.
Read ·
list_accountsGets messages newer than a given one
Returns messages in a chat newer than a message ID, oldest first, as JSON records.
Network ·
get_messages_afterWaits for new messages in chosen chats
Waits for new messages in followed chats and returns when some arrive.
Network ·
wait_for_eventsWaits for a new private message
Waits until a new private message from a non-bot user arrives, then returns it.
Network ·
wait_for_new_messageWaits until a private chat goes quiet
Waits for incoming private messages and returns once a burst of them has settled.
Network ·
wait_for_settled_messageTurns on a file feed of incoming messages
Starts a background task that writes each incoming burst of messages to a feed file. It is meant for Claude Code only.
Write ·
enable_incoming_feedTurns off the incoming message feed
Stops writing incoming messages to the feed file.
Write ·
disable_incoming_feedShows whether the incoming feed is on
Reports whether the incoming message feed is on, and where its file is.
Files ·
incoming_feed_status
Read from the source code
Pros and cons
Good
- Covers nearly everything the Telegram app does, from chats and contacts to groups, folders and admin tasks.
- A read-only mode hides every tool that can change things.
- You can limit it to a list of chats so the rest stay invisible.
- File tools stay off until you choose which folders it may use.
- Actively maintained, with frequent releases and quick fixes to reported bugs.
- Free and open source, running on your own computer.
Watch out
- Not made by Telegram, and it works on your whole account rather than a separate bot.
- It can delete messages for everyone in a chat.
- Telegram may limit or ban accounts that send fast or in bulk.
- Setup needs a git clone, Python tools, Telegram API keys and a session string.
- The PyPI package with the same name is a different project, so the usual one-line install is unsafe.
- Running several copies at once can trip Telegram's limits; use its shared mode for more than one app.
Permissions
high risk · 6 things to watch
High risk
It logs in as you, so a mistaken or tricked assistant can send, edit or delete messages for everyone in your chats, and the session string is a full login to your account. Turn on read-only mode, limit it to the chats you need, and keep the session string out of shared files.
What it can do
- Read your data
- Create and change things
- Delete things
- Read-only modeHow to turn it on
Watch out for
It acts as you, on your whole account
The session string is a full login to your Telegram account. Anyone who gets it can read and send as you, so keep it out of git and shared configs. github.com
It can delete messages for everyone
Its delete tools remove messages on both sides by default. Use read-only mode unless you need it to change things. github.com
Telegram may limit or ban the account
Telegram flags fast or bulk activity from third-party apps. Use an account you have had for a while and avoid mass messaging; @SpamBot tells you if you are limited. docs.telethon.dev
The PyPI package is someone else's
The telegram-mcp name on PyPI belongs to a different project. Install only from the GitHub repo, or that package could receive your Telegram login. github.com
Unconfirmed report of two security flaws
A researcher reported a cross-site request issue in the shared web mode and a chat-allowlist bypass but has not published details, and neither is confirmed. Until it is resolved, prefer the default local mode over the shared web mode. github.com
Chat allowlist had gaps (fixed)
Some tools could reach chats outside the allowlist until a fix in October 2026. Update to the latest release. github.com
Security advisories
No published security advisories as of Nov 1, 2026.
Technical details
| Turning on read-only | Set TELEGRAM_EXPOSED_TOOLS=read-only in the server's env; read-only+send_message,reply_to_message keeps read-only and adds only those write tools. |
|---|---|
| Talks to | Telegram servers (MTProto) |
| Sign-in and keys | Your Telegram API ID and hash plus a session string or .session file, kept in .env or your client's config on your machine. |
Alternatives
Use this server if you want your assistant to work inside your own Telegram account, and turn on read-only mode. Pick the read-only server if you only want reading and search, Chatroost if you do not want to run Python, or a bot server if messages should come from a bot instead of you.
| Server | Runs | Sign-in | Can change things | GitHub stars |
|---|---|---|---|---|
| telegram-mcp (chigwell)This page | Local | Your account | Yes | 1.9K |
| telegram-mcp (chaindead) | – | – | – | 350 |
| mcp-telegram (dryeab) | Local | – | – | 254 |
| Chatroost | HostedLocal | Your account | Yes | 64 |
| telegram-mcp-readonly | – | – | No | 13 |
| Telegram Bot MCP Server | Local | Bot token | Yes | 1 |
What people say
People like how fast bugs get fixed, and worry about how much an assistant can do to an account it fully controls.
What people like
- Reported allowlist and privacy-setting bugs were fixed within a day.
Common complaints
- A privacy-settings change could make your phone number visible to everyone without saying so, until it was fixed.
- One user lost outgoing messages across many chats while using it with Codex, and the cause was never found.
In their words
“On October 16, 2026, around 08:40 UTC, outgoing messages suddenly disappeared from many unrelated private chats. Incoming replies remained.”Conquest743GitHub issueOct 2026
“It performs no background or automatic deletions, and it keeps no log of its Telegram API traffic (only `mcp_errors.log` for errors).”axisrowGitHub issueOct 2026
“The phone becomes visible to everybody; nothing in the output hints at it”axisrowDocs
“Any third-party library is prone to cause the accounts to appear banned.”
Questions
Is there an official Telegram MCP server?
No. Telegram does not publish one. This community server is the most widely used, with far more GitHub stars than the next one.
Does it use a bot or my own account?
Your own account. It logs in with an API ID and hash from my.telegram.org and a session string, so everything it sends comes from you. If you want messages to come from a bot, use a bot server instead.
Can my Telegram account get banned?
It can happen. Telegram limits or bans accounts that act like spammers through third-party apps, especially new accounts or fast bulk sending. Use an account you have had for a while, and message @SpamBot to check if you are limited.
Is it safe?
Only with care. It has full access to your account, so turn on read-only mode, limit it to the chats you need, and never share your session string.
How do I make it read-only?
Set TELEGRAM_EXPOSED_TOOLS to read-only in the server settings. You can add just the sending tools back with read-only+send_message,reply_to_message.
Can it delete my messages?
Yes, unless you use read-only mode. Its delete tools remove messages for everyone in the chat by default, and it can clear whole chat histories.
Can I limit it to certain chats?
Yes. List the chats in TELEGRAM_ALLOWED_CHAT_IDS and every other chat stays hidden from the assistant.
Can I install it with pip or uvx?
No. The telegram-mcp package on PyPI is a different project and could receive your Telegram login. Install it from the GitHub repo as the install box shows.
Where do I get the API ID and API hash?
Log in at my.telegram.org/apps with your phone number and create an app. Telegram then shows your API ID and hash.
Is it free?
Yes. It is open source under Apache-2.0 and runs on your own computer.
Examples
Summarize your unread messages without replying to anyone.
Summarize my unread Telegram messages, but don't reply to anything
Draft replies for you to review before anything is sent.
Draft replies to my three most recent direct messages and show them to me without sending
Pull action items and urgent requests out of busy chats.
Go through today's messages in my work groups and list anything that needs action from me
Search chat history and summarize the conversation around a match.
Find where we discussed the venue in the event planning group and summarize what was decided
Read a chat's history and send a reply.
Read my chat with Alex from this week and reply confirming Friday
Information
updated Nov 2, 2026
- Publisher
- Community
- Transport
- stdio, Streamable HTTP, SSE
- Auth
- token in env
- License
- Apache-2.0
- Last commit
- Oct 31, 2026
- Open issues
- 9
Other Telegram MCP servers
Sources
Docs, issue trackers and discussions this page is built from. Issues, quotes and findings above link to their own source.
Show all 12Hide
- telegram-mcp README · github.com
- Telethon FAQ · docs.telethon.dev
- telegram-mcp tool source · github.com
- Outgoing messages disappeared across multiple private chats · github.com
- Two authorization vulnerabilities · github.com
- TELEGRAM_ALLOWED_CHAT_IDS is bypassed via contact_id/group_id · github.com
- Cancelled tool calls break the stdio connection in Claude Code · github.com
- set_privacy_settings silently replaces all privacy rules · github.com
- telegram-mcp skills · github.com
- chigwell/telegram-mcp · github.com
- chaindead/telegram-mcp · github.com
- dryeab/mcp-telegram · github.com