telegram-mcp (KiaroSama/telegram-mcp) is an MCP server listed on the M8ven Trust Index. It scores 74 out of 100, grade C. It declares 216 tools. No publisher has claimed this listing.

C
Emerging
74/100

telegram-mcp

Drive a real Telegram account from an MCP client. Telethon plus TDLib for what Telethon's layer cannot reach: chats, messages, media, secret chats, admin rights, invite links and Mini Apps, with multi-account routing and measured-not-assumed Telegram behaviour.

Emerging. No concerning findings. Grades remain capped until the project builds reputation through adoption. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

Code Verified⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

KiaroSama

Source: github_repo_search

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
216 tools verified — handlers match their declared behaviour
96 read-only tools verified — handlers contain no write/delete/exec
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
Open source with a license and README
Anyone can audit the code, the license is declared, and the publisher documents what it does.
// tools this server exposes216 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

list_accounts

List all configured Telegram accounts with profile info.

promote_admin

Promote a user to admin in a group/channel.

demote_admin

Demote a user from admin in a group/channel.

edit_admin_rights

Set granular admin rights for a user in a supergroup or channel.

get_admins

Get all admins in a group or channel.

inspect_buttons

List a message's inline ("glass") buttons with the index needed to press one.

click_button

Press one inline ("glass") button, chosen by its index from inspect_buttons.

check_channel_username

Ask Telegram whether a public username is free for this channel.

set_channel_username

Change a channel's public username — or, with an empty one, make it private.

get_channel_statistics

The statistics Telegram keeps for a channel, a supergroup, or one post.

get_similar_channels

The channels Telegram recommends as similar to this one.

set_discussion_group

Attach a discussion group to a channel, or detach the one it has.

set_join_to_send

Require members to join a supergroup before they can post in it.

set_join_request

Require admin approval before someone joins.

set_prehistory_hidden

Hide messages sent before a member joined.

set_participants_hidden

Hide the member list from non-admins.

set_signatures

Sign channel posts with the name of the admin who sent them.

set_view_forum_as_messages

Show a forum as one flat message list rather than as topics.

subscribe_public_channel

Subscribe (join) to a public channel or supergroup by username or ID.

mute_chat

Mute notifications for a chat.

unmute_chat

Unmute notifications for a chat.

archive_chat

Archive a chat.

unarchive_chat

Unarchive a chat.

get_chats

Get a paginated list of chats. Args: page: Page number (1-indexed). Paging stops at 100,000 chats in. page_size: Number of chats per page (1-200; a larger value is served as 200 and the reply reports both numbers).

list_chats

List available chats with metadata.

get_chat

Get detailed information about a specific chat.

search_public_chats

Search chats, channels and bots by username or title.

resolve_username

Resolve a username to a user or chat ID.

get_full_chat

Get full info of a channel or group including description/about text.

get_common_chats

List chats shared with a specific user.

get_message_read_by

List user IDs who have read a specific message.

get_message_link

Export a t.me/... link for a specific message.

set_contact_alias

Remember what the user calls someone, so any tool taking a chat_id understands it.

list_contact_aliases

List remembered contacts, one row per person with all of their aliases.

delete_contact_alias

Forget one remembered alias. Exact match only — deleting the wrong memory is silent, so fuzzy matching is deliberately not used here. Use list_contact_aliases first if unsure of the exact wording.

list_contacts

List all contacts in your Telegram account.

search_contacts

Search for contacts by name, username, or phone number using Telethon's SearchRequest. Saved favorite aliases matching the query are checked first and returned at the top. Args: query: The search term to look for in contact names, usernames, or phone numbers.

get_contact_ids

Get all contact IDs in your Telegram account.

get_direct_chat_by_contact

Find a direct chat with a specific contact by name, username, or phone.

get_contact_chats

List all chats involving a specific contact.

get_last_interaction

Get the most recent message with a contact.

add_contact

Add a new contact to your Telegram account. Args: phone: The phone number of the contact (with country code). Required if username is not provided. first_name: The contact's first name. last_name: The contact's last name (optional). username: The Telegram username (without @). Use this for adding co

delete_contact

Delete a contact by user ID. Args: user_id: The Telegram user ID or username of the contact to delete.

block_user

Block a user by user ID. Args: user_id: The Telegram user ID or username to block.

unblock_user

Unblock a user by user ID. Args: user_id: The Telegram user ID or username to unblock.

import_contacts

Import a list of contacts. Each contact should be a dict with phone, first_name, last_name.

export_contacts

Export all contacts as a JSON string.

get_blocked_users

Get a list of blocked users.

send_contact

Send a contact to a chat. Args: chat_id: The chat ID or username. phone_number: Contact's phone number. first_name: Contact's first name. last_name: Contact's last name (optional). vcard: Additional vCard data (optional).

inspect_custom_emoji

Every premium/custom emoji in a message, with the id needed to replace one.

replace_custom_emoji

Swap the premium emoji in a message for a different one, keeping everything else.

get_file_roots_status

Report whether the file tools are usable, and exactly what to configure if not.

list_message_effects

List the message effects this account can send, so one can be CHOSEN.

get_message_effect

Resolve a message-level effect ID to its real assets, and optionally show one.

list_disappearing_media

Find the self-destructing media in a chat, before it is opened.

send_disappearing_media

Send a photo, video or voice message that destroys itself after viewing.

wait_for_new_message

Block until a new incoming private message from a non-bot user arrives, then return immediately with the list of chats that currently have pending (unprocessed) incoming messages. If nothing arrives within `timeout` seconds, returns {"event": false, "reason": "timeout"}. Lets the agent react to even

wait_for_settled_message

Event-driven, DEBOUNCED wait. Blocks until some private user chat has received one or more incoming messages AND then gone quiet for `settle_ms` — so a client who types several messages (or sends file + text) in a row is delivered as ONE settled burst instead of waking the agent on every message. Re

enable_incoming_feed

CLAUDE CODE ONLY. Enable callback mode: a background task appends every settled incoming burst as one JSON line to the feed file, so an external watcher can wake the agent per event instead of the agent blocking in wait_for_settled_message.

disable_incoming_feed

Disable the incoming event feed (stops writing to the feed file).

incoming_feed_status

Report whether the incoming event feed is enabled, its file path, and the watch command for waking an agent per event.

list_folders

Get all dialog folders (filters) with their IDs, names, and emoji. Returns a list of folders that can be used with other folder tools.

get_folder

Get detailed information about a specific folder including all included chats.

create_folder

Create a new dialog folder.

add_chat_to_folder

Add a chat to an existing folder.

remove_chat_from_folder

Remove a chat from a folder.

delete_folder

Delete a folder. Chats in the folder are preserved, only the folder is removed.

reorder_folders

Change the order of folders in the folder list.

create_group

Create a new group or supergroup and add users.

create_channel

Create a channel or supergroup, private by default or public under a username.

edit_chat_title

Edit the title of a chat, group, or channel.

edit_chat_photo

Edit the photo of a chat, group, or channel. Requires a file path to an image.

edit_chat_about

Edit the description ("About") of a chat, group, or channel.

delete_chat_photo

Delete the photo of a chat, group, or channel.

toggle_slow_mode

Enable or disable slow mode for a supergroup.

leave_chat

Leave a group or channel by chat ID.

get_participants

List participants in a group or channel with pagination. Args: chat_id: The group or channel ID or username. page: Page number (1-indexed, default 1). Paging stops at 100,000 participants in. page_size: Number of participants per page (default 200, max 1000; a larger value is served as 1000).

invite_to_group

Invite users to a group or channel.

inspect_message

Full API view of one message, optionally with a picture of it.

inspect_messages

Full API view of the newest messages in a chat.

create_invite_link

Mint an additional invite link, with any conditions Telegram supports.

edit_invite_link

Change the conditions on an existing invite link.

revoke_invite_link

Stop an invite link working. Anyone holding it is locked out.

list_invite_links

The invite links this account created for a chat, with their conditions.

list_join_requests

People waiting for approval to join, from links that require it.

approve_join_request

Let someone in, or turn them away, from the pending-approval queue.

get_invite_link

Read the invite link a group or channel already has.

export_chat_invite

Mint a NEW primary invite link for a chat, replacing the previous one.

import_chat_invite

Join a chat by its invite hash (the part after t.me/+ or t.me/joinchat/).

join_chat_by_link

Join a chat by invite link.

get_admin_rights_via_tdlib

Read one admin's rights through TDLib, which sees the ones Telethon cannot.

set_admin_right

Switch ONE admin right on or off, including the ones Telethon cannot deliver.

send_file

Send a file to a chat. Args: chat_id: The chat ID or username. file_path: Absolute or relative path to the file under allowed roots. Pass a list of 2-10 paths to send them as one Telegram media group. caption: Optional caption for the file or media group. topic_id: Optional forum topic ID (from list

send_album

Send multiple photos/videos as one Telegram media group (album).

download_media

Download media from a message in a chat.

send_voice

Send a voice message to a chat. File must be an OGG/OPUS voice note.

upload_file

Upload a local file to Telegram and return upload metadata.

get_media_info

Get info about media in a message.

get_sticker_sets

List this account's packs, with the identifiers other tools need.

send_sticker

Send a sticker to a chat. File must be a valid .webp sticker file.

116 further tools are not listed here. The complete surface is in the source.

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configTELEGRAM_EVENT_FEED
configXDG_STATE_HOME$/telegram-mcp/ (~/.local/state/telegram-mcp/ by default), a directory the
configTELEGRAM_LINK_DOMAINsets the domain used to build message permalinks; the default is
configTELEGRAM_API_ID, TELEGRAM_API_HASH, or TELEGRAM_SESSION_STRING to that
configTELEGRAM_API_HASHTELEGRAM_API_ID, , or TELEGRAM_SESSION_STRING to that
configGITHUB_STEP_SUMMARY
configGITHUB_JOB
configRUNNER_OS
configGITHUB_SHA
configTELEGRAM_CONTACT_FUZZY
configNO_COLORis set or the terminal has no virtual-terminal processing.
configTELEGRAM_ALLOW_SERVER_ROOTS_FALLBACK1 to fall back to the server CLI roots
configTELEGRAM_LOCK_GRACE_SECONDS
configMCP_TRUSTED_PROXY_AUTHA reverse proxy in front authenticates requests. The server cannot verify this; you are stating it.
configMCP_ALLOW_UNAUTHENTICATED_REMOTEDeliberately open on a network you trust. Warns on every start.
configMCP_ALLOWED_HOSTSlocalhost: and [::1]:. Setting replaces that default
configMCP_ALLOWED_ORIGINSMCP_ALLOWED_HOSTS (and optionally ) to allow that Host header,
configMCP_STATELESS_HTTPSet =true for the older behaviour, where a client survives a
configMCP_HOSTFor http and sse, the server binds :MCP_PORT (default
configMCP_PORTFor http and sse, the server binds MCP_HOST: (default
configMCP_TRANSPORTThe server speaks three MCP transports, selected with :
configTELEGRAM_EXPOSED_TOOLSread-only to expose only tools annotated with
configTELEGRAM_DESKTOP_PROCESS
// quality suggestions

All four hints declared on every tool

207/216 tools missing one or more hints — list_accounts (missing: destructiveHint, idempotentHint, openWorldHint); promote_admin (missing: readOnlyHint); demote_admin (missing: readOnlyHint), +204 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 1 concrete improvement we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Score](https://m8ven.ai/badge/mcp/kiarosama/telegram-mcp)](https://m8ven.ai/mcp/kiarosama/telegram-mcp)
Shows your grade and updates automatically. Prefer no grade? Append ?variant=verified to the badge URL.
commit: ce5c96027d4c409ed6177c81f74984f63e8eff47
code hash: 451abf80f8d10c1c156c2c9330eea1c54b0fe35f82d22038ad6cb5a0fa3849ea
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client