Custom Telegram MCP server + TUI auto-responder for running Claude Code as an autonomous Telegram agent
Three tools with clear verb-noun naming (get_*, download_*) and reasonable descriptions (100-150 chars). All tools have input schemas with typed parameters and descriptions. However, output schemas are not documented in the provided source, parameter constraints lack enums/ranges, and error handling guidance is minimal. The download_attachment tool accepts multiple optional identifier patterns (file_id, row_id, chat_id) without clear mutual-exclusivity documentation. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles.
Download a Telegram message attachment by file_id or row_id. Returns the local file path. Supports short-circuit caching: if the attachment was previously downloaded and the file still exists on disk, returns the cached path without re-downloading.
Retrieve message history from a Telegram chat with optional limit and offset parameters. Returns messages with coverage information indicating data completeness.
Retrieve unread messages from a Telegram chat or across all chats. Returns messages with coverage information.
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., message IDs, timestamps, file paths) without knowing response structure.
download_attachment accepts three optional identifier parameters (file_id, row_id, chat_id) without documenting mutual exclusivity or precedence. LLMs may pass conflicting combinations.
Numeric parameters (limit, offset) lack min/max constraints. LLMs could pass negative, zero, or absurdly large values (e.g., limit=-1 or limit=999999).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). download_attachment is marked WRITE but lacks destructiveHint; get_* tools lack readOnlyHint.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | <=2025-11-25 | v2 |
Error handling descriptions missing. No guidance on retryability, user-fixable errors, or recovery steps (e.g., 'If chat_id is invalid, call list_chats() first').