MCP server for sending messages, voice notes, photos, documents, videos, audio, and animations to Telegram chats as multiple companion bot accounts
Server has 10 tools with complete input schemas and consistent naming (verb_noun pattern: telegram_send, telegram_get_*). All tools include descriptions (avg ~80 chars) and parameter descriptions. However, output schemas are entirely undocumented, no response structure is defined anywhere in the code. Error handling is minimal: no recovery guidance, no categorization of retryable vs fatal errors, no actionable error messages. The 'companion' parameter is well-designed with enum constraints, but most other parameters lack format/range constraints. No tool annotations (readOnlyHint/destructiveHint) despite clear READ vs WRITE semantics. Missing: pagination support for telegram_get_updates (could return hundreds of updates), output field documentation, and error recovery patterns.
Get information about a chat
Get information about a companion's bot account
Get recent messages and updates seen by a specific companion's bot
Send a text message to a Telegram chat as a specific companion
Send a GIF/animation to a Telegram chat as a specific companion. Supports URL or file_id.
Send an audio file to a Telegram chat as a specific companion. Displays with music player widget. Supports URL or file_id.
No output schemas documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., what does telegram_get_me return? What fields are in the response?). This violates pattern:tool and forces agents to guess at response structure.
No error handling or recovery guidance. Code calls telegramRequest() but does not document what errors are possible, whether they are retryable, or what the LLM should do next. A failed send returns raw Telegram API error with no actionable guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Send a document/file to a Telegram chat as a specific companion. Supports URL or file_id.
Send a photo to a Telegram chat as a specific companion. Supports URL or file_id.
Send a video to a Telegram chat as a specific companion. Displays with inline player. Supports URL or file_id.
Send a voice note to a Telegram chat as a specific companion
telegram_get_updates lacks pagination controls and result limits. No limit cap documented; could return hundreds of updates, exhausting context window. Missing offset/limit parameters in schema and no mention of max results in description.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). All WRITE tools (send_*) should be marked destructiveHint=true; all READ tools (get_*) should be marked readOnlyHint=true. This helps agents reason about side effects and retry safety.
Parameter descriptions lack format/range constraints. 'chat_id' is described as 'The chat ID to send to' but does not specify format (numeric, string, negative for groups). 'message' has no length limit. 'limit' in telegram_get_updates has no min/max bounds.