Telegram MCP has 12 tools with complete input schemas and descriptions. Naming follows verb_noun convention (list_, get_, send_, etc.). Descriptions are present but brief (avg ~60 chars, below the 194-char baseline). Parameters are typed and mostly described, but lack constraints (enums, ranges, patterns). Output schemas are partially documented via _format_message helper but not formally declared. Error handling is minimal, no recovery guidance or actionable error messages. Missing tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. No pagination support for list_dialogs or get_messages despite potential for large result sets.
Archive a chat.
Delete one or more messages from a chat.
Edit the text of an existing message.
Forward messages from one chat to another.
Get details about a specific chat or channel.
Get messages from a chat, channel, or saved messages.
List your Telegram chats, channels, and groups.
Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools like delete_messages and send_message have clear risk levels but no annotations to guide agent behavior.
No pagination support. list_dialogs and get_messages accept limit but no offset/cursor. Large result sets will be truncated without a way to fetch more, violating paginated-result pattern.
Descriptions are too brief (avg 60 chars vs 194-char baseline). Missing context on when to use each tool and what distinguishes similar tools (e.g., get_messages vs search_messages).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
Pin a message in a chat.
Search messages by text across all chats or within a specific chat.
Send a text message to a chat, channel, or saved messages.
Unarchive a chat.
Unpin a message in a chat.
No error handling guidance. Tools will fail (e.g., invalid chat_id, permission denied) but provide no recovery hints. LLM cannot self-correct or suggest alternatives.
Output schemas not formally documented. _format_message helper exists but return types are not declared in tool definitions. LLM cannot plan downstream calls without guessing field names.