An MCP server that enables searching and indexing of private Telegram messages using local retrieval, semantic search, and thread context expansion.
Two tools with complete schemas and descriptions, but significant gaps in parameter documentation and error handling. search_messages has good description (194 chars) and 5 parameters with types, but 2 lack descriptions (self_user_id missing description detail, context_before/after lack usage guidance). index_private_messages has minimal description (97 chars) and only 1 parameter. Neither tool documents output schema structure, error cases, or recovery paths. No validation guidance or constraint documentation. Naming is clear (verb_noun pattern), but descriptions lack WHEN/WHY context for LLM selection.
Authenticate with Telegram if needed and index private text messages into the local Room database.
Search indexed private Telegram messages using local retrieval, local heuristics, and expanded thread context. Latest-oriented queries refresh the local index first, while reusing a recent refresh to avoid duplicate imports.
Output schema not documented. search_messages returns SearchResponseDataModel with nested intent, results, and messages fields, but LLMs cannot see this structure in tool definition. Agents cannot plan downstream operations or extract required fields.
index_private_messages description is too brief (97 chars, below 120 baseline). Does not explain WHEN to call it vs search_messages, what 'authenticate' means, or what happens to existing index. Missing WHAT/WHEN/WHY context.
No error handling guidance. Tools do not document failure modes (auth failure, index corruption, query timeout, no results). Agents cannot distinguish retryable errors from user-fixable ones. No recovery paths provided.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | <=2025-11-25 | v2 |
Parameter constraints missing. limit (default 5) and limit_per_chat (default 1000) lack min/max bounds. context_before/after_messages (default 12) lack range documentation. Unbounded integers invite absurd LLM values.
search_messages readOnlyHint=false contradicts tool behavior (read-only search). Should be true. index_private_messages openWorldHint=false is correct but destructiveHint not set despite modifying local database.