AI-powered Telegram bot for cryptocurrency analysis using Gemini AI, RSS news feeds, and token data integration
This MCP server has critical structural issues that severely limit its usability as a production tool. The codebase shows 11 tools with inconsistent quality: some have reasonable descriptions but lack proper input schemas, while others appear to be Telegram bot handlers that do not belong in an MCP tool registry. The server conflates Telegram command handlers (start_command, help_command, ask_command) with reusable tools, violating the single-responsibility principle. Input parameter descriptions are present but parameter types are frequently missing or underspecified (e.g., Telegram 'update' and 'context' objects are typed as bare 'object' with no schema details). Critically, 5 of 11 tools have inputs typed as generic 'object' without property definitions, making schema inspection impossible and violating JSON Schema best practices. Error handling is nearly absent, tools either succeed silently or invoke Telegram-specific side effects rather than returning actionable recovery guidance. The server appears designed as a Telegram bot first, with tools retrofitted afterward, rather than as a cohesive MCP tool ecosystem.
Telegram bot command handler that processes /ask commands by extracting the query and invoking main analysis logic.
Extracts one or more token names or symbols from user input using a comprehensive stop word list and robust text normalization.
Fetches headlines from multiple RSS feeds. If a token is provided, it filters for that token. If no token is provided, it fetches the latest general headlines.
Constructs a dynamic prompt for the Gemini CLI and invokes Gemini AI models for cryptocurrency analysis, token comparison, or general queries. Performs fallback to alternative models if primary fails.
Core logic function that processes user queries, extracts tokens, fetches news headlines, and generates AI analysis. Manages conversation memory and typing indicators.
Five tools (start_command, help_command, ask_command, private_text_handler, send_safe_reply) have Telegram-specific 'update' and 'context' parameters typed as bare 'object' with no property schema. This violates JSON Schema standards and prevents LLM clients from understanding valid inputs.
Telegram command handlers (start_command, help_command, ask_command, private_text_handler) are registered as MCP tools but are Telegram bot framework functions, not reusable tools. They conflate transport-layer dispatch with tool semantics, violating single-responsibility and composition patterns.
get_gemini_analysis accepts a 'fallback_callback' parameter typed as 'function' with no description of how it works, when it fires, or what signature it expects. Functions cannot be serialized or passed by LLM clients, this parameter is unusable in practice.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 44 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 36 | - | v1 |
Telegram bot command handler that sends help message with available commands and usage examples.
Loads conversation history from JSON file for a given chat ID, filtering entries older than 24 hours.
Telegram bot message handler that processes regular text messages in private chats without requiring /ask command.
Saves conversation entries to JSON file for a given chat ID with timestamp.
Sends a safe reply to a Telegram message, splitting long responses into 4096-character chunks and using markdown formatting.
Telegram bot command handler that sends a welcome message with usage instructions.
No error handling documentation across any tool. Tools silently fail or invoke side effects (e.g., Telegram messages) without returning recovery guidance. Errors are not categorized as retryable, user-fixable, or fatal.
fetch_token_headlines has 'max_articles' parameter with default value 2, but no min/max bounds specified. If an LLM passes 10000, the tool may hang or exhaust memory. Parameter constraints are missing.
handle_analysis_query accepts 'current_update' (Telegram object) as a parameter, but this is transport-specific and breaks abstraction. An MCP client cannot construct a valid Telegram Update object. Parameter should be extracted to natural identifiers like user_id, chat_id.
load_memory and save_memory operate on local JSON files with hardcoded paths. No isolation, no per-client storage, and file I/O is synchronous. This is not compatible with hosted MCP servers or concurrent clients.
get_gemini_analysis description mentions 'Gemini CLI' and file I/O ('prompt/GEMINI.md') but does not document the output schema, return format, or what 'fallback_callback' does. Input schema is also incomplete (memory array with no item schema).
No input validation. Parameters like 'token_name_or_symbol' accept any string without length limits, charset restrictions, or injection safeguards. LLMs could pass SQL injection payloads or excessively long strings.
Tool names 'start_command', 'help_command', 'ask_command' do not follow verb_noun convention. Should be 'send_welcome', 'list_help_topics', 'analyze_query' or similar. Current names are Telegram-centric, not tool-centric.