Interactive Telegram Notifier & Confirmation MCP Server for Claude Code and Cursor with On-Demand Polling and skills
Server has 10 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-50 chars, below ideal 50-200 char baseline), and input schemas are present with type definitions. However, descriptions are generic and lack actionable context for LLM selection. No output schemas documented. Error handling is minimal, tools throw raw errors without recovery guidance. Parameter descriptions exist but lack constraints (enums, ranges, formats). No tool annotations (readOnlyHint, destructiveHint). Naming is verb-first and clear, but composition issues exist: send_message_with_keyboard and edit_message_reply_markup are narrow variants that could be unified. Security concern: no visible permission gates or audit logging.
Answer a callback query from an inline button press in Telegram
Download a file from Telegram to local storage
Edit the reply markup (keyboard) of an existing message in Telegram chat
Edit the text of an existing message in Telegram chat
Poll for new updates from Telegram (messages and callback queries)
Send a document file to Telegram chat
Send a text message to Telegram chat
Descriptions are too short (10-50 chars vs. baseline 50-200 chars). Generic text like 'Send a text message to Telegram chat' lacks context for LLM selection. No guidance on when to use send_message vs. send_message_with_keyboard, or when to call get_updates.
No output schemas documented. Callers cannot know what fields to expect from send_message, get_updates, or download_telegram_file. This forces LLMs to guess at response structure and breaks tool chaining.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Send an interactive message with inline keyboard buttons to Telegram chat
Send a photo image to Telegram chat
Send a video file to Telegram chat
Parameter descriptions lack constraints. 'parse_mode' accepts 'HTML, Markdown, MarkdownV2' but is not declared as an enum. 'timeout' in get_updates has no range (1-300?). 'offset' has no format guidance. LLMs will hallucinate invalid values.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads (get_updates) from destructive writes (send_message, delete operations). This breaks agent planning and safety.
Error handling is minimal. Code throws raw errors (e.g., 'Failed to send message: ...') without recovery guidance. No categorization of retryable vs. fatal errors. LLMs receive no actionable next steps on failure.