Telegram integration for Claude via the Model Context Protocol. Provides tools to read/send messages, manage chats, and interact with Telegram via Telethon client.
This server has severe definition quality issues across multiple dimensions. Of the 22 tools, most lack complete input schemas visible in the source code. The server appears to have tools defined across multiple files (main.py, agent/src/tools/telegram.ts, agent/src/tools/nia.ts, agent/src/tools/aiify.ts), but only main.py source is partially visible. Critical gaps: (1) No input schemas are explicitly visible for any tool in the provided source code, tool definitions appear to be inferred from the tool list metadata rather than explicit schema registration. (2) Descriptions vary from adequate to vague; many read as implementation notes rather than LLM-optimized selection guides. (3) Parameter descriptions exist but lack precision on constraints, formats, and error recovery. (4) No visible error handling patterns, validation logic, or recovery guidance in the source. (5) Duplicate tools across files (get_chats vs getChats, send_message vs sendMessage, etc.) signal poor composition and will confuse LLMs. (6) No evidence of output schema documentation. (7) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in code. The server prioritizes feature breadth over definition depth.
Transform a message (usually her message) into a witty, romantic, or clever response. This tool helps you craft the perfect reply by: 1. Analyzing the incoming message's tone and context 2. Searching your pickup lines for relevant content 3. Generating a response that matches the vibe
Delete a message. Use to remove embarrassing messages.
Edit a message you sent. Fix typos or update content.
Get detailed information about a specific chat by ID or username.
List all Telegram chats (conversations). Returns chat ID, name, type, and last message preview. Use this to find someone's chat ID before reading or sending messages.
Get full chat history (up to 500 messages). Use for getting more context about the conversation.
Read messages from a specific Telegram chat. Returns message ID, text, sender, date. Use after getChats to get the chat_id.
Duplicate tools with different naming conventions (snake_case vs camelCase): get_chats/getChats, send_message/sendMessage, get_messages/getMessages, etc. LLMs will waste reasoning cycles deciding which to use, or fail when the selected variant is unavailable.
No explicit input schemas visible in provided source code. Tool definitions appear inferred from metadata rather than registered with JSON Schema. Cannot verify parameter types, constraints, enums, or descriptions programmatically.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 35 | - | v1 |
Get detailed information about a specific chat by ID or username.
Get list of recent Telegram chats with basic info (IDs, names, types, unread counts, last message preview).
Get full chat history (up to 500 messages) for deeper context about a conversation.
Retrieve messages from a specific Telegram chat. Returns message ID, text, sender, and date.
General semantic search across all your indexed Nia data sources (documentation, repos, etc). Use for broader context when pickup lines search doesn't have what you need.
Reply directly to a specific message. Creates a reply thread.
Schedule a message to be sent at a future time. Perfect for sending good morning/night messages.
Search for contacts by name, username, or phone number.
Search your indexed pickup lines and conversation knowledge base using semantic search. Use this to find relevant pickup lines, flirty responses, conversation starters, or dating advice based on context. THIS IS YOUR MAIN TOOL FOR RELATIONSHIP ADVICE.
Search for contacts by name, username, or phone number.
Send a text message to a Telegram chat. Returns success status and message ID.
Send a reaction emoji to a message. Perfect for reacting to her messages with ❤️ 🔥 😂 😮 😢 🎉 👍 👎
Send a text message to a Telegram chat. Returns success status and message ID.
Send a reaction emoji to a message. Perfect for reacting with ❤️ 🔥 😂 😮 😢 🎉 👍 👎
Search the web for real-time information. Use sparingly - only when you need current information not available in the knowledge base.
Tool descriptions lack LLM-optimization guidance. Many read as implementation notes ('Returns message ID, text, sender, and date') rather than selection guides ('Use to read recent messages from a conversation; provides message IDs for reply/reaction operations'). Descriptions under 50 chars (get_chat, deleteMessage) lack context for when to call the tool.
Parameter constraints not fully documented. 'chat_id' accepts 'integer|string' but no guidance on format (numeric ID vs '@username'). 'message' maxLength is 4096 but no guidance on what happens if exceeded. 'emoji' accepts freeform string, no validation that it's actually an emoji, no guidance on which emoji reactions are valid on Telegram.
Destructive tools (deleteMessage, editMessage) lack confirmation or dry-run patterns. No evidence in source that agents are warned these operations are irreversible, or that a confirmation step is offered before execution.
No visible error handling guidance in source code. Parameter validation, API failures, rate limits, and Telegram API errors (e.g., 'user blocked', 'chat not found', 'permission denied') have no documented recovery paths. LLMs will have no guidance on retry strategy or next steps.
Output schemas not documented. No visible response type definitions for any tool. LLMs cannot infer what fields get_chats returns, whether message IDs are in the response for downstream tools (e.g., send_reaction), or what structure to expect from search tools.
Tool composition broken by missing IDs in responses. If getMessages returns message text but omits message_id, the agent cannot immediately call sendReaction or replyToMessage without an extra lookup. No evidence response includes all IDs needed for chaining.
Poorly named/positioned tools for AI-assisted composition: 'searchPickupLines' (non-verb start) and 'aiifyMessage' (vague action verb). Names do not clearly convey their function to LLMs. 'searchPickupLines' suggests database lookup, not semantic search + response generation. 'aiifyMessage' is ambiguous, does it parse, generate, or transform?
Parameter 'offset_id' for pagination is poorly named and documented. LLMs may confuse 'offset_id' with 'skip N messages' (offset-based pagination) vs 'fetch messages before ID' (cursor-based). Description states 'Optional message ID to get messages before' but doesn't explain direction (forward vs backward) or behavior at boundaries.