Persistent Telegram memory infrastructure for AI agents. Provides semantic search, digests, decision extraction, and knowledge graph querying over Telegram conversations.
Agent Memory MCP has 16 tools with generally clear naming (verb_noun pattern) and reasonable descriptions (avg ~150 chars). However, critical gaps exist: input schemas are visible but lack comprehensive type definitions for all parameters; several parameters missing descriptions or constraints; output schemas are not documented; error handling is minimal. The server demonstrates domain expertise (Telegram memory, semantic search, knowledge graphs) but falls short of production-grade tool design. Most tools are READ_ONLY (safe), but add_source is WRITE and lacks confirmation/dry-run patterns.
Connect a Telegram channel, group, or entire folder as a memory source. Works with public @usernames/t.me links and private invite links (t.me/+hash or t.me/joinchat/hash — the account joins the chat). For folders: set source_type="folder" and handle = folder name (use list_folders to see available). Adding a folder imports ALL channels in it at once.
Map-reduce analysis for large result sets (>30 BM25 hits). Extracts relevant info from each batch, then aggregates. Use for overview/analytical questions with many matching posts.
Get a full context package for an agent task.
Extract decisions, action items, and open questions from conversations.
Get a digest of Telegram conversations for a period. For large channels this may take 1-2 minutes (embedding + clustering + LLM). If it takes too long, use keyword_search or vector_search for targeted queries instead.
Output schemas not documented. Tools return results but LLMs cannot predict field names, types, or structure. Forces agents to guess at response shape and plan downstream calls blindly.
add_source (WRITE operation) lacks confirmation/dry-run pattern. Agents can accidentally connect wrong channels or sync with incorrect ranges without preview. No recovery guidance if sync fails.
Error handling minimal. No recovery guidance in tool descriptions. When scope not found (ScopeNotFound exception visible in code), agents receive raw error with no suggestion of valid scopes or next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Get metadata about the knowledge base domain: detected topic, entity types, relation types, total message count. Call first if you need orientation.
Query the knowledge graph with natural language. Converts your question to a Cypher query and executes it against FalkorDB. Use for: counting entities, finding specific relations, complex graph patterns, listing entities of a type.
Search the knowledge graph (FalkorDB). Returns entities, relations, and community summaries. Best for questions about connections between entities.
BM25 keyword search in PostgreSQL. Best for exact terms, hashtags, proper nouns. Returns snippets (first 200 chars) and total count.
List everyone in a chat's membership — not just people who wrote. Distinct from message authors: this is Telegram's actual member list, so silent members show up too, with @ники even for people who never posted. Sources where membership could NOT be collected (no admin rights on a broadcast channel, FloodWait, a 1:1 dialog, ...) are listed under `unavailable_sources` with the reason — never conflate that with an empty chat.
List all available scopes for get_digest, search_memory, and other tools. Call this FIRST to discover valid scope values before calling get_digest or search_memory.
List all connected memory sources. Each source carries two INDEPENDENT flags — do not conflate them: `sync_enabled` (+ `next_sync`, `last_synced`) — the source keeps ingesting new messages. This is "is synchronization working?". `monitoring` / `observe_layer` — the source counts toward the Observe Layer (labels, workload). OFF does NOT mean syncing is off. For per-run job detail and errors, call sync_status.
Read full content of messages by their IDs. Use AFTER search to get complete text of relevant snippets. Already-read IDs are skipped.
Rerank cached search results using a cross-encoder. Use when you have >10 search results and want to find the most relevant ones.
Search Telegram memory by semantic query.
Dense+sparse vector search in Milvus. Best for concepts, topics, semantic similarity. Returns snippets (first 200 chars) and scores.
Parameter constraints not formalized. 'period' in get_digest accepts '1d, 3d, 7d, 30d' but no enum constraint visible; 'scope' pattern varies across tools; 'since' format examples given but no regex/format schema. LLMs will hallucinate invalid values.
Pagination not consistently implemented. search_memory has 'limit' but no 'offset' or 'next_cursor'. Large result sets (e.g. 100+ messages) will be truncated without agent ability to fetch remaining pages.