MCP Telegram
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TELEGRAM_API_ID | Yes | Your Telegram API ID from my.telegram.org | |
| TELEGRAM_USE_WSS | No | Set to 'true' to use port 443 instead of 80 (default: false) | |
| TELEGRAM_API_HASH | Yes | Your Telegram API hash from my.telegram.org | |
| TELEGRAM_PROXY_IP | No | Proxy server address (optional) | |
| MCP_TELEGRAM_DAEMON | No | Set to '1' to run in daemon mode (optional) | |
| TELEGRAM_PROXY_PORT | No | Proxy server port (optional) | |
| TELEGRAM_PROXY_SECRET | No | MTProxy secret (enables MTProxy mode) | |
| TELEGRAM_SESSION_PATH | No | Path to store the session file (default: ~/.mcp-telegram/session) | |
| TELEGRAM_PROXY_PASSWORD | No | Optional proxy auth password | |
| TELEGRAM_PROXY_USERNAME | No | Optional proxy auth username | |
| MCP_TELEGRAM_ENABLE_STARS | No | Set to '1' to enable stars tools | |
| TELEGRAM_PROXY_SOCKS_TYPE | No | SOCKS type: 4 or 5 (default: 5) | |
| MCP_TELEGRAM_ENABLE_GROUP_CALLS | No | Set to '1' to enable group call tools | |
| MCP_TELEGRAM_ENABLE_QUICK_REPLIES | No | Set to '1' to enable quick replies tools |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| telegram-statusB | Check Telegram connection status |
| telegram-loginA | Login to Telegram via QR code. Returns QR image. IMPORTANT: pass the entire result to user without modifications. |
| telegram-logoutA | Log out from Telegram completely. Revokes the session on Telegram servers (removes it from Settings → Devices), deletes the local session file, and disconnects. After this you must run telegram-login to re-authenticate. |
| telegram-send-messageA | Send a message to a Telegram chat |
| telegram-read-messagesA | Read recent messages from a Telegram chat with sender names, dates, media info, and reactions |
| telegram-search-messagesA | Search messages in a specific Telegram chat by text |
| telegram-search-globalA | Search messages globally across all public Telegram chats and channels |
| telegram-edit-messageB | Edit a previously sent message in Telegram |
| telegram-delete-messageB | Delete messages in a Telegram chat |
| telegram-forward-messageB | Forward messages between Telegram chats |
| telegram-get-unreadA | Get chats with unread messages. Forums show per-topic unread breakdown |
| telegram-get-scheduledB | List scheduled messages in a Telegram chat |
| telegram-delete-scheduledB | Delete scheduled messages in a Telegram chat |
| telegram-get-repliesB | Get replies/comments under a Telegram channel post or discussion message |
| telegram-get-message-linkA | Get a t.me link to a specific message in a Telegram channel or supergroup |
| telegram-get-unread-mentionsA | Get unread @mentions addressed to you in a Telegram chat. Marks all mentions as read on the server when all unread mentions fit within the requested limit. |
| telegram-get-unread-reactionsA | Get messages with unread reactions on your posts in a Telegram chat. Marks all reactions as read on the server when all unread reactions fit within the requested limit. |
| telegram-translate-messageA | Translate one or more Telegram messages to a target language (requires Telegram Premium). Consumes account translation quota. |
| telegram-send-typingA | Send a typing/upload indicator to a Telegram chat (or cancel it) |
| telegram-mark-as-readB | Mark a Telegram chat as read |
| telegram-inline-queryA | Query an inline bot (like @gif, @bing) in a chat context and return the compact result list. Returns queryId, cacheTime, and results[{id,type,title?,description?,url?}]. The queryId is typically valid for ~60s and can be passed to telegram-inline-query-send to deliver a chosen result. Bot must be a real bot account |
| telegram-inline-query-sendA | Send an inline bot result to a chat by queryId + resultId (as returned by telegram-inline-query). The queryId is valid for ~60s after the original query, so call this soon after telegram-inline-query. Returns the sent messageId (0 if not extractable from the update). |
| telegram-get-message-buttonsA | List the inline/reply keyboard buttons on a Telegram message with their (row, col) indices, type (e.g. KeyboardButtonCallback, KeyboardButtonUrl), label and type-specific fields (callback data as base64, url, switchQuery, userId, copyText, etc). Helper for telegram-press-button — call this first to discover indices and filter by type before pressing. Returns markupType='none' and empty buttons when the message has no keyboard |
| telegram-press-buttonA | Press an inline keyboard callback button on a message. Identify the button by (row, column) from its replyMarkup, or pass raw callback_data as base64. URL, switch-inline, game and 2FA-password buttons are rejected with a clear error. Returns the bot's callback answer: {alert?, hasUrl?, nativeUi?, message?, url?, cacheTime} |
| telegram-get-stateA | Initialize the polling cursor by fetching the current Telegram updates state {pts, qts, date, seq, unreadCount}. Call once before telegram-get-updates; then persist {pts, qts, date} in your agent state and feed them into telegram-get-updates. The MCP server does NOT store the cursor — you do. |
| telegram-get-updatesA | Fetch new messages, deleted messages, and other updates since a previously-known {pts, qts, date} cursor (from telegram-get-state or a prior call). Returns compact newMessages[], deletedMessageIds[], otherUpdates[] (className only), and the new cursor state. isFinal=false means more updates are queued — call again with the returned state. If Telegram reports the gap is too long, a fallback hint is returned suggesting to resync via telegram-read-messages per chat. Cursor is stateless — the agent must persist {pts, qts, date} between calls. |
| telegram-get-channel-updatesA | Fetch new messages and updates for a single channel/supergroup since a known per-channel pts cursor. Separate from the global cursor used by telegram-get-updates. Returns compact newMessages[], otherUpdates[], and new {pts, isFinal, timeout?}. If the channel gap is too long, Telegram returns a dialog snapshot — this tool forwards it and hints to resync via telegram-read-messages. Cursor is stateless — the agent stores pts. |
| telegram-get-discussion-messageA | For a channel post with comments enabled, returns the linked discussion-group info: discussionGroupId, discussionMsgId, unreadCount, readInboxMaxId, readOutboxMaxId, topMessage. Use discussionGroupId + discussionMsgId with telegram-send-message (replyTo=discussionMsgId) to post a comment. |
| telegram-get-groups-for-discussionA | List groups that can be linked as a discussion group to a channel you admin. Helper for channel admins setting up comment threads. |
| telegram-get-message-read-participantsA | List who has read a message in a small group (≤100 members, ≤7 days old). Returns readers with userId, readAt timestamp. Does NOT work for channels or groups over 100 members (CHAT_TOO_BIG). |
| telegram-vote-pollB | Vote in a poll by option index (single or multi-choice). Empty array retracts vote. |
| telegram-get-poll-resultsA | Get aggregated poll results: vote counts, percentages, quiz answer status |
| telegram-get-poll-votersA | List users who voted for specific poll options (public polls only, paginated) |
| telegram-close-pollA | Close a poll permanently. This is a one-way operation — closed polls cannot be reopened. |
| telegram-get-outbox-read-dateA | Get when your recipient read your outgoing message in a private chat. Returns null/Not read yet if unread. Errors if the other side disabled read receipts (YOUR_PRIVACY_RESTRICTED / USER_PRIVACY_RESTRICTED). |
| telegram-list-chatsA | List Telegram chats with unread counts, type indicators, and contact status |
| telegram-search-chatsA | Search for Telegram chats, users, or channels by name or username. Returns description and member count |
| telegram-get-chat-infoA | Get detailed info about a Telegram chat including name, type, members, description, and forum status |
| telegram-get-chat-membersC | Get members of a Telegram group or channel |
| telegram-get-my-roleA | Get the current user's role in a chat (creator, admin, or member) |
| telegram-create-groupB | Create a new Telegram group or supergroup |
| telegram-join-chatA | Join a Telegram group or channel by username or invite link |
| telegram-leave-groupB | Leave a Telegram group or channel |
| telegram-invite-to-groupB | Invite users to a Telegram group or channel |
| telegram-kick-userA | Kick a user from a Telegram group (removes without permanent ban) |
| telegram-ban-userA | Ban a user from a supergroup or channel (permanent until unbanned) |
| telegram-unban-userA | Unban a previously banned user from a supergroup or channel |
| telegram-edit-groupA | Edit a group's title, description, or photo |
| telegram-set-adminA | Promote a user to admin in a supergroup or channel with full permissions |
| telegram-archive-chatA | Archive or unarchive a Telegram dialog (moves to/from the Archive folder) |
| telegram-pin-chatA | Pin or unpin a Telegram dialog in the dialog list |
| telegram-mark-dialog-unreadA | Mark a Telegram dialog as unread (or clear the unread mark) |
| telegram-get-admin-logA | Get the admin action log (recent event history) of a supergroup or channel. Includes bans, edits, pins, and role changes |
| telegram-remove-adminB | Remove admin rights from a user in a supergroup or channel |
| telegram-set-chat-permissionsA | Set the default permissions for all non-admin members of a group, supergroup, or channel. Omitted flags keep their current state; true = allowed, false = denied |
| telegram-set-slow-modeA | Set slow mode for a supergroup (minimum interval between messages per user). Allowed values: 0, 10, 30, 60, 300, 900, 3600 seconds (0 disables slow mode) |
| telegram-toggle-channel-signaturesA | Enable or disable author signatures on broadcast channel posts. Channel admin required; not supported for supergroups |
| telegram-toggle-anti-spamA | Enable or disable aggressive anti-spam filtering in a supergroup. Supergroup only (not broadcast channels); requires admin with ban_users permission |
| telegram-toggle-forum-modeA | Enable or disable forum/topics mode in a supergroup. Supergroup only; requires creator or admin. WARNING: disabling removes ALL existing topics — pass confirm=true to proceed with disable |
| telegram-toggle-prehistory-hiddenA | Toggle pre-history visibility for new members in a supergroup. When hidden=true, new joiners cannot see messages posted before they joined. Supergroup only; requires admin |
| telegram-approve-join-requestA | Approve or deny a pending join request for a supergroup or channel (basic groups are not supported). Admin with invite_users permission required |
| telegram-create-topicA | Create a new forum topic in a forum-enabled supergroup |
| telegram-edit-topicB | Edit a forum topic — rename, change icon emoji, open/close, or show/hide |
| telegram-get-broadcast-statsA | Get broadcast channel statistics: followers, views/shares/reactions per post & story, notification percent, recent post interactions. Broadcast channels only (use telegram-get-megagroup-stats for supergroups). Admin rights required; some channels may require Telegram Premium to expose stats |
| telegram-get-megagroup-statsA | Get supergroup statistics: members, messages, viewers, posters (current vs previous period), top posters/admins/inviters. Supergroups only (use telegram-get-broadcast-stats for broadcast channels). Admin rights required. Telegram rate-limits this endpoint to roughly 1 request per 30 minutes per channel — expect FLOOD_WAIT on rapid repeat calls |
| telegram-delete-topicA | Delete a forum topic and all its message history |
| telegram-send-fileA | Send a file (photo, document, video, etc.) to a Telegram chat |
| telegram-download-mediaA | Download media from a Telegram message to a local file |
| telegram-get-profile-photoA | Download profile photo of a Telegram user, group, or channel. Returns inline image or saves to file |
| telegram-get-web-previewA | Fetch Telegram's web-page preview metadata (type, title, description, site name) for a URL |
| telegram-send-voiceA | Send a voice note (audio recording) to a Telegram chat. Shows as a voice message with waveform UI. |
| telegram-send-video-noteB | Send a video note (round-shaped short video) to a Telegram chat. Shows as a circular video in the UI. |
| telegram-send-contactB | Send a contact card (phone number + name) to a Telegram chat. |
| telegram-send-diceA | Send an animated dice/game emoji to a Telegram chat. Returns the server-rolled value — useful for games, coin-flips, random picks. Values: 🎲🎯🎳 = 1-6, 🏀⚽ = 1-5, 🎰 = slot combo 1-64. |
| telegram-send-locationA | Send a geographic location to a Telegram chat. Static pin by default; set livePeriod to share a live-updating location for N seconds. |
| telegram-send-venueB | Send a venue card (point-of-interest with title and address) to a Telegram chat. |
| telegram-send-albumA | Send an album (group) of 2-10 photos as a single grouped message. Media type is auto-detected by file extension — videos are supported by the underlying TL call but are not covered by v1.29.0 mock tests, so uniform-photo albums are the safer choice until a live checkpoint. Uploads are serial per item: expect ≈4-10s for 10 mid-size photos, 15-40s for 10 large videos. Prefer ≤5 items or photos when low latency matters. |
| telegram-get-contactsA | Get your Telegram contacts list with phone numbers |
| telegram-get-profileA | Get detailed profile info of a Telegram user including bio, birthday, premium status, business info and more |
| telegram-get-contact-requestsA | Get incoming messages from non-contacts (contact requests). Shows who messaged you without being in your contacts, with message preview |
| telegram-add-contactA | Add a user to your Telegram contacts. Use this to accept contact requests from non-contacts |
| telegram-block-userB | Block a Telegram user. Blocked users cannot send you messages |
| telegram-unblock-userB | Unblock a previously blocked Telegram user |
| telegram-report-spamA | Report a chat as spam to Telegram |
| telegram-send-reactionA | Send emoji reaction(s) to a message. Supports multiple reactions and adding to existing ones. Omit emoji to remove all reactions |
| telegram-get-reactionsA | Get detailed reaction info for a message: which reactions, counts, and who reacted (when visible) |
| telegram-set-default-reactionA | Set the default emoji reaction used in quick-reaction menus across Telegram |
| telegram-get-top-reactionsB | Get the list of most popular emoji reactions available on Telegram |
| telegram-set-chat-reactionsA | Set which reactions are available in a chat. type='all' allows all standard emoji (set allowCustom=true to also permit custom emoji for Premium users), type='some' restricts to a specific emoji list, type='none' disables reactions entirely. Requires admin |
| telegram-get-recent-reactionsA | Get the list of emoji reactions the current account used recently |
| telegram-send-paid-reactionA | Send a paid reaction (★ Stars) on a channel post. Stars are spent from your balance. Optional private flag controls leaderboard visibility. |
| telegram-toggle-paid-reaction-privacyA | Change leaderboard visibility of your paid reaction on a specific channel post (Layer 198 API). |
| telegram-get-paid-reaction-privacyA | Get your current default paid reaction privacy setting. |
| telegram-transcribe-audioA | Request server-side transcription of a voice note or video note (Telegram Premium feature). Returns immediately with transcriptionId — if pending:true, call telegram-get-transcription to poll for completion. |
| telegram-get-transcriptionA | Poll for updated transcription result. Calls the same endpoint as telegram-transcribe-audio — Telegram guarantees idempotency (returns same transcriptionId with updated text once processing completes). |
| telegram-rate-transcriptionB | Rate transcription quality (good/poor) to improve Telegram speech-to-text. |
| telegram-get-fact-checkA | Get fact-check annotations on channel messages. Fact-checks are added by independent fact-checkers in supported countries. Most messages will show no fact-check. |
| telegram-edit-fact-checkA | Add or update a fact-check annotation. Requires fact-checker privileges (limited to independent verifiers in supported countries). |
| telegram-delete-fact-checkA | Remove a fact-check annotation. Requires fact-checker privileges. |
| telegram-pin-messageB | Pin a message in a Telegram chat |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- 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/overpod/mcp-telegram'
If you have feedback or need assistance with the MCP directory API, please join our Discord server