MCP server for Telegram: full tool set plus server-to-client push notifications on new messages
This MCP server exposes 51 Telegram tools with mixed quality. Naming is mostly verb-first and clear (login, logout, send, delete, etc.), which is good. However, descriptions vary widely in quality, some are adequate (10-50 chars), while others are too terse or lack actionable guidance. Parameter schemas are present and typed (JSON Schema), but many parameters lack detailed descriptions explaining constraints, valid ranges, or expected formats. Output schemas are not documented anywhere in the visible code, forcing LLMs to infer response structure. Error handling guidance is minimal, most tools lack recovery hints. The server is STDIO-only, which is a hard transport limitation. Overall, the tools are functional but fall short of production-grade quality expected for high-touch Telegram operations.
Send multiple media files as an album
Ban a member from a group
Set your bio/about text
Block a user
Show blocked users
List cached messages from a chat
Add a contact
Delete a contact
No output schemas documented. Tools return data but LLMs cannot predict response structure (field names, types, pagination). Forces LLMs to infer from trial-and-error or context.
Parameter descriptions are generic and lack actionable constraints. E.g., 'target' is described as 'who: @username, chat id, or contact name' in ALL tools, but no guidance on format preference, parsing behavior, or error recovery if resolution fails.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
List contacts
Export contacts
Import contacts
Delete messages from a chat
List chats with unread count and last message preview
Download a media file from a chat
Set or clear a draft message in a chat
Edit a message
Export account data (config, session, messages cache, media files)
Create a custom message folder
Delete a custom message folder
List custom message folders
Forward messages from one chat to another
Import account data (config, session, messages cache, media files)
Remove a member from a group
Check login state; interactive OTP login only via `termgram login` in a terminal
Log out the current session
Show the logged-in account identity
List members in a group or channel
Show recent messages in a chat, newest last
Set your first and last name
Control the server-to-client push filter for new-message notifications. on=true with target: push only that chat. on=true: push every chat. on=false with target: stop pushing that chat. on=false: stop all pushes
Set your profile photo
Delete your profile photo
Pin or unpin a message in a chat
List pinned messages in a chat
Create a poll in a chat with 2 to 10 answer options
Promote a member in a group to admin
React to a message with an emoji
List reactions on a message
Schedule a message to be sent at a specific time
Search messages in a chat or globally
Search all messages across all chats
Search messages in a specific chat
Accept/reject a sign request from another device
Sync local message cache with server
List forum topics in a forum-enabled chat
Unban a member from a group
Unblock a user
Send a media file to a chat
Send a voice message
Wait (push, no polling) until a new message arrives - returns instantly on Telegram push. target: chat to watch (omit for any chat). after: only messages with id greater than this. timeout: seconds to wait (default 60, max 110)
Snapshot the last messages of a chat (or the latest dialogs when target is omitted, or only chats with unread messages when unread is set); does not follow a live stream
Many tool descriptions are too terse (under 50 chars) and lack context for LLM decision-making. E.g., 'sign' has 52 chars with minimal explanation of use case or when to call it.
No error handling guidance. Tools lack descriptions of failure modes, recovery steps, or actionable error messages. LLMs have no idea what to do if 'target' resolution fails or an API returns an error.
No pagination declared. Tools like 'dialogs', 'messages', 'members', 'pinned', 'contacts', 'blocklist', 'folders' return lists but lack limit/offset or cursor parameters and do not document result capping.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk field is present in the metadata but not surfaced to the protocol. LLMs cannot automatically infer whether a tool is safe to retry or irreversible.
Ambiguous parameter design. 'text' parameter in edit, schedule, draft, poll, etc. is described as 'object' type but no schema details. LLMs cannot infer whether to pass plain text, markdown, or structured formatting.
Missing mutual-exclusivity documentation. E.g., 'notify' with on=true + target or on=true alone have different behaviors; 'watch' with no target vs unread=true, not clearly documented as mutually exclusive modes.