Dotiphant
Provides access to a local archive of your Telegram chats, including people, groups, forum topics, and optional channels. The MCP server allows AI assistants to search and read message history, media, and recent activity from the archive, while Dotiphant syncs read-only from Telegram.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Dotiphantwhat did Clara and I agree on about the launch date?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Dotiphant
Your Telegram chats, searchable on your own computer and readable by your AI assistant.
AI assistants can't read your Telegram. Bots only see messages sent after they join, never the history. Cloud CRMs that sync Telegram want your account on their servers. Dotiphant logs in as you, copies your chats into a single file on your own computer, and lets your AI assistant read that file when you ask it to.

What you get
The full history of your chats with people and groups, including forum topics and groups that were upgraded to supergroups. Channels are optional.
A local viewer in your browser with fast full-text search, media, and "copy as Markdown" for any chat or time range.
An MCP server, so Claude Desktop, Claude Code, Codex and Cursor can search and read your archive. ChatGPT, claude.ai and other apps that support remote MCP servers can connect through the optional HTTP mode behind a tunnel you run (see docs/remote-access.md).
Markdown export on the command line, ready to pipe into any AI tool.
Read-only toward Telegram: Dotiphant never sends, edits, deletes or marks anything as read.
Your Telegram session and API keys stay in the system keychain. The archive is a SQLite file in a private folder.
Background refresh every 15 minutes, if you want it.
Related MCP server: Telegram Account MCP Connector
Quick start
On macOS or Linux, paste this into a terminal:
curl -fsSL https://dotiphant.com/install.sh | shThe script is about 150 lines; read it first. It installs uv if needed (uv brings its own Python), installs the latest Dotiphant release from GitHub, and runs dotiphant open. To update, run it again; it also stops a viewer that still runs the old version.
The installer checks the download against the release's SHA-256 checksums and stops on a mismatch. To check a release yourself, see Verify a download.
Dotiphant ships as GitHub releases, not on PyPI. Other ways, if you already have uv:
Goal | Command |
Install a release |
|
From a local clone |
|
Update |
|
The command is dotiphant; phant is a short alias.
dotiphant open walks you through setup in your browser in about 5 minutes. dotiphant setup does the same in the terminal. Both are safe to run again:
Create your own Telegram API id and hash at my.telegram.org (free, about a minute).
Log in by scanning a QR code with the Telegram app (Settings > Devices > Link Desktop Device). Phone login works too.
Choose what to archive: people and groups by default, the last 365 days or everything.
Run the first sync.
Connect the AI apps it finds on your computer, and turn on background refresh.

Afterwards:
dotiphant open # browse and search in your browser
dotiphant connect claude-desktop # or claude-code, codex, cursorNot comfortable with a terminal? Give docs/install-with-ai.md to Claude Code, Codex or another AI assistant that can run commands, and it will install Dotiphant with you.
Try it without Telegram
dotiphant demoThis opens the viewer on made-up chats, stored apart from your real data. No login needed. It uses port 8764, so it can run next to dotiphant open.
Things to ask your AI assistant
"What did Clara and I agree on about the launch date?"
"Summarize what happened in my groups since yesterday."
"Which messages do I still owe an answer to this week?"
"Find the wallet address someone sent me in the Acme group."
"Draft a reply to Wendell based on our last conversation." (Dotiphant never sends it; you do.)
Commands
Command | What it does |
| Open the viewer at http://127.0.0.1:8765, with setup on first run. |
| The same guided setup in the terminal. Safe to re-run; finished steps are skipped |
| Fetch new messages now, for all chats or the ones named. A named chat also gets edits to its recent messages. Sync also keeps each chat's profile photo. Exits with 3 when some chats could not be read (they are retried next time), 2 when not logged in or the archive belongs to another account |
| Fetch new or changed chat profile photos without a full sync. |
| Login, archive size, last sync, background refresh |
| Check the installation and print fixes |
| Connect an AI app to your archive, or list the apps it can connect |
| List archived chats |
| Full-text search, with |
| Print a chat as Markdown, |
| What happened in the last 24 hours |
| Download photos, files and voice notes of a chat |
| Refresh in the background every N minutes |
| The MCP server (AI apps start this themselves) |
| Remote access for ChatGPT, claude.ai and other remote MCP apps: docs/remote-access.md |
| Add a Telegram Desktop JSON export ( |
| Show which chats AI apps may read. |
| Delete a chat and its media from the archive, and stop syncing it |
| Try the viewer with made-up chats |
| Stop a running viewer and the demo viewer, for example after an update |
| Log in again, or end the session |
CHAT can be a chat id, an @username or part of the title. Run dotiphant COMMAND --help for all options.
dotiphant export "Acme" --since 7d | claude -p "What are the open action items?"Privacy and safety
Everything stays on your computer. Dotiphant has no cloud service and sends no telemetry.
Dotiphant only reads from Telegram, and paces its requests, and waits whenever Telegram asks it to slow down.
The viewer listens on 127.0.0.1 only. The MCP server talks to AI apps over stdio and opens no port.
The optional HTTP MCP server listens on 127.0.0.1 and needs a bearer token or an app you approved with a one-time pairing code. With
--host ADDRESS --allow-remoteit listens on that address instead, and other machines can reach it. Remote access through a tunnel: docs/remote-access.md.Message text handed to an AI is marked as untrusted, and the AI is told never to follow instructions found in messages. This lowers the risk of prompt injection; no tool can rule it out.
When you ask an AI app a question, the messages it reads go to that app's provider, the same as anything else you paste into it.
You choose which chats AI apps may read. Hide single chats, or allow only the chats you pick, with
dotiphant aior the "Visible to AI apps" switch on a chat's page. Hidden chats are never listed, searched or read by AI apps. The viewer and the CLI still show every chat.The stored session gives full access to your Telegram account. Protect your computer like you protect your phone.
Dotiphant never uses your messages to train AI models.
Details, and how to wipe everything: docs/security.md. What data exists and who receives it: docs/privacy.md. Common questions: docs/faq.md.
Not affiliated with Telegram
Dotiphant is an independent, unofficial app that uses the Telegram API. It is not made, endorsed or supported by Telegram. It uses the public Telegram API with your own API credentials, and you are responsible for using it within the Telegram API Terms of Service. Using Telegram data with AI apps is also subject to Telegram's Terms for Content Licensing and AI Scraping. Check both before you connect an AI app.
Use at your own risk
Dotiphant is built with care, on a best-effort basis. Use it at your own risk. It comes without any warranty, and its authors accept no liability for damage or loss, as set out in the MIT license.
License
MIT
Available Tools
6 toolschat_infoChat detailsBRead-only
Details of one chat: kind, members, forum topics, most active participants with usernames, and archive coverage (first and last message).
| Name | Required | Description | Default |
|---|---|---|---|
| chat | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds value by disclosing what data is exposed (member lists, usernames of most active participants, archive boundary), but says nothing about cost, rate limits, or behavior when the chat is missing or inaccessible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that enumerates the payload without padding. It is dense but every clause maps to a distinct returned field.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return-value enumeration is partly redundant, and the genuinely missing piece, the accepted identifier format for 'chat', is not addressed. Adequate for a simple read, but incomplete on the only input an agent must produce.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'chat' has 0% schema description coverage and accepts either a string or an integer, yet the description never explains what form the identifier takes (username, title, numeric ID). The description does not compensate for the schema gap on the one parameter an agent must supply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-plus-resource ('Details of one chat') and enumerates the returned data (kind, members, forum topics, top participants, archive coverage), which clearly separates it from list_chats. It never names a sibling explicitly, but the singular 'one chat' scope makes the distinction inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use statement, no prerequisites, and no mention of alternatives such as list_chats for enumeration. Usage is only implied by the word 'one chat'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messagesRead messagesARead-only
Read one chat in chronological order, one line per message ([ref], #id, date UTC, sender, text).
Without since/around_message_id you get the newest limit messages (the right call
for "latest from X" or drafting a reply). around_message_id: the context of a search
hit. before_message_id / after_message_id: the limit messages just before or after
that one, to page through history; after_chat: the chat of the after_message_id
message when the paging note names one. since/until: a time range like "7d" or
"2026-09-01". limit: at most 300.
topic: forum topic id or title. media: only messages with an attachment, to list
shared files: "files" (photos, videos, documents, voice, audio), "any", or one of
photo, video, document, voice, audio, sticker, poll, link.
| Name | Required | Description | Default |
|---|---|---|---|
| chat | Yes | ||
| limit | No | ||
| media | No | ||
| since | No | ||
| topic | No | ||
| until | No | ||
| after_chat | No | ||
| after_message_id | No | ||
| around_message_id | No | ||
| before_message_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful operational context beyond that: the hard cap of 300 on limit, the default window behavior when no range filter is supplied, and the exact rendered line format. It does not discuss pagination edge cases beyond the paging notes, keeping it at a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core behavior and output format, then breaks parameter guidance into compact clauses that each convey distinct information. Slightly dense as a single paragraph, but no sentence is redundant; a light bulleted layout would push it to a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter read tool, the description covers default behavior, range filtering, paging direction, media filtering, and result format, and an output schema exists to cover return structure. An agent has everything needed to select the right argument combination on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry all parameter meaning and it largely does: limit's 300 cap, since/until format examples ('7d', '2026-09-01'), after_chat's role tied to the paging note, topic accepting id or title, and media's full enum including the 'files'/'any' aggregates. Only `chat` itself is left undefined, which is self-evident given the stated purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one chat in chronological order') and specifies the exact output shape (one line per message with ref, id, date UTC, sender, text). This distinguishes it from list_chats and search_messages, which do not return per-message text in that form, and the mention of 'the context of a search hit' implicitly positions it against search_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes between modes: no since/around means newest `limit` messages, 'the right call for "latest from X" or drafting a reply'; around_message_id for search-hit context; before/after_message_id for paging history; since/until for time ranges. Each parameter's use case is stated so the agent can pick the right call without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chatsList chatsARead-only
List archived Telegram chats with chat id, kind, last activity and message count, most recent first. Use it to find a chat id or to see when a chat was last active.
query: part of a chat title or username. kind: private, group, channel or bot. active_since: only chats with messages since then, like "24h", "7d" or "2026-09-01".
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | ||
| query | No | ||
| active_since | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint=false, so the safety profile is covered. The description adds useful traits — the result ordering and the set of fields returned — but says nothing about pagination/limit behavior or what "archived" scope actually includes (all chats vs. archived-only), which is the main ambiguity for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and ordering, then a three-line parameter glossary with zero filler. Every sentence adds either scope, usage routing, or parameter meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is optional and the field list is a bonus. For a four-parameter filtered list tool with read-only annotations, the only meaningful hole is the undocumented limit parameter and the unstated meaning of "archived" scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden and largely does: query is defined as part of a title/username, kind enumerates the four accepted values, and active_since gets concrete format examples ("24h", "7d", "2026-09-01") that the schema does not supply. The limit parameter is never mentioned, leaving its default of 30 and maximum unbounded from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List archived Telegram chats") plus the returned fields and sort order ("most recent first"), which is well beyond a restatement of the name. It does not explicitly differentiate itself from siblings like chat_info or search_messages, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use it to find a chat id or to see when a chat was last active" gives clear positive usage context tied to concrete outcomes. It never names an alternative tool or states when not to use this one, so no exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recent_activityRecent activityARead-only
What happened recently across chats, most recent first: per chat the number of new messages, the latest few, and a flag on chats waiting for the user's reply. Use for "what's new", "what did I miss" and "who am I owing an answer".
since: "24h", "7d", "2026-09-01". chats: limit to these chats. per_chat: messages shown per chat (max 20). kind: only private chats, groups, channels or bots.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| chats | No | ||
| since | No | 24h | |
| per_chat | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuine behavior beyond that: results are ordered most recent first, aggregation is per chat, and there is an explicit 'waiting for the user's reply' flag. It does not disclose pagination, caps on the number of chats returned, or cost/latency considerations, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact blocks: the purpose/return summary first, then per-parameter notes, each sentence load-bearing. Front-loaded correctly with the highest-value information. Minor deduction for the slightly fragmented line-wrapped phrasing that reads like an unstyled bullet list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be spelled out, yet the description still characterizes the payload (counts, latest few, reply flag) helpfully, and annotations cover the safety profile. Defaults (since=24h, per_chat=5) and the exact 'chats' identifier format are the remaining holes an agent might need before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden and largely meets it: 'since' gets concrete format examples ('24h', '7d', '2026-09-01'), 'per_chat' gets a meaning plus an undocumented cap of 20, 'kind' is glossed per enum value, and 'chats' is described as a limiting filter. The gap is 'chats', where the accepted identifier form (string usernames vs integer ids) is never clarified for a union-typed array.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete verb+resource and result shape: 'What happened recently across chats, most recent first: per chat the number of new messages, the latest few, and a flag on chats waiting for the user's reply.' An agent immediately knows this is an aggregated digest, not a raw message dump. It doesn't explicitly contrast itself with siblings like list_chats, get_messages or search_messages, so it misses the top mark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Use for "what's new", "what did I miss" and "who am I owing an answer"' line gives strong user-intent triggers that map directly onto selection decisions. However, it never states when NOT to use it (e.g., for a full message search use search_messages, for a single chat's history use get_messages), so no exclusions or named alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refreshRefresh from TelegramAIdempotent
Fetch new messages from Telegram into the archive (all chats, or one chat), then wait up to wait_seconds (max 300) for it to finish. Refreshing one chat also picks up edits to its recent messages. Never sends anything to Telegram.
| Name | Required | Description | Default |
|---|---|---|---|
| chat | No | ||
| wait_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: it blocks and waits up to wait_seconds (capped at 300), single-chat refresh also picks up edits, and 'Never sends anything to Telegram' clarifies that readOnlyHint=false refers to local archive writes, not outbound sends. That said, it doesn't explain the archive-write side effects or whether refresh is safe to run concurrently.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loading the core action, then the wait behavior, then the safety note. No filler and each sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover the safety profile and an output schema exists, so the description needn't explain return values. It covers both parameters and the key blocking behavior; the only remaining gap is any hint about typical duration or failure handling when the wait times out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description does the needed work: 'chat' is explained as optional all-chats-vs-one-chat selector, and 'wait_seconds' is described as a wait bound with a max of 300 (a constraint absent from the schema). It doesn't say whether chat accepts a username, ID, or title, leaving the string-or-integer ambiguity unresolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Fetch new messages from Telegram into the archive' — and scopes it ('all chats, or one chat'). An agent can distinguish this from get_messages or search_messages because the description makes clear it pulls new data into the archive rather than querying existing stored messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies when to use it (to get new messages and edits into the archive) and notes that refreshing a single chat also captures recent-message edits, which is a useful contextual cue. However, it never explicitly names alternatives such as search_messages or get_messages or states when not to refresh.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_messagesSearch messagesARead-only
Keyword search over all archived messages and file names, newest first, grouped by chat. Returns message ids to open with get_messages(around_message_id=...).
query: 1 to 3 distinctive words; every word must match, as a prefix ("audit" also finds "audits"). If no message has all words, messages with any of them are returned. Use "quoted phrases" and OR for alternatives (launch OR release). Not semantic: search for words the messages would contain, not for the question. chat: chat id, @username or part of a title. sender: part of a sender name or username. since/until: "24h", "7d", "2026-09-01" or an ISO timestamp. media: only messages with an attachment: "files" (photos, videos, documents, voice, audio), "any", or one of photo, video, document, voice, audio, sticker, poll, link.
| Name | Required | Description | Default |
|---|---|---|---|
| chat | No | ||
| limit | No | ||
| media | No | ||
| query | Yes | ||
| since | No | ||
| until | No | ||
| sender | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds real behavioral detail beyond them — ordering (newest first), grouping by chat, and the prefix-matching fallback ('if no message has all words, messages with any of them are returned'), which changes how results should be interpreted. It does not mention the limit default of 20 or truncation behavior, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense two-block structure: a summary sentence with the return path first, then a parameter glossary. Every clause carries actionable information with no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be explained, and the description still adds ordering, grouping, and the message-id linkage. Missing are pagination/limit behavior and result count behavior, minor but relevant for a 7-parameter search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry all parameter meaning, and it does: query prefix-matching/quoting/OR semantics, chat accepting id/@username/title fragment, sender as partial name, since/until formats ('24h', '7d', ISO), and the media enum values. Only limit is left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource+scope: 'Keyword search over all archived messages and file names, newest first, grouped by chat.' It also explains the output shape and routes the agent to get_messages(around_message_id=...) for opening a hit, which distinguishes it from list_chats/get_messages/recent_activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when this applies and when not: 'Not semantic: search for words the messages would contain, not for the question.' It names the follow-up tool and the exact parameter for drill-down, so an agent knows both entry and next step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
chat_info - First observed
get_messages - First observed
list_chats - First observed
recent_activity - First observed
refresh - First observed
search_messages
TDQS
Scored across 6 tools
Each tool has a distinct read-only role: listing chats, detailing one chat, searching messages, reading a chat, summarizing recent activity, and syncing the archive. There is minor overlap between list_chats, chat_info, and recent_activity, but their descriptions make the boundaries clear.
All names use consistent lowercase snake_case, making the set readable. However, the verb_noun pattern is only followed by list_chats, search_messages, and get_messages, while chat_info, recent_activity, and refresh deviate.
Six tools is well-scoped for a read-only Telegram archive browser, with each tool covering a distinct workflow. No tool feels redundant or missing from the core set.
The surface covers chat discovery, message search, chronological reading with paging, recent activity summaries, chat metadata, and archive refresh. For a read-only archive, there are no obvious dead ends or missing lifecycle operations.
Maintenance
Related MCP Connectors
Your personal data for AI — Telegram, bank, courses, Zoom & more, scoped to you.
Read, search and reply to your WhatsApp chats from your AI, using your own number.
Search, read and reply to your Telegram Business chats, transcribed voice included.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search and act on Telegram conversations, groups, channels, files, and links, with semantic search, AI-powered knowledge extraction, human-in-the-loop approvals, and PostgreSQL/pgvector persistence.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to read chats, Saved Messages, files and media, search history, and send messages through your personal Telegram account.3MIT
- FlicenseNot gradedqualityAmaintenanceEnables AI assistants to read Telegram conversations, search messages, retrieve chat context, resolve recipients, and send messages with delivery status.1-
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to read your own Telegram account via MTProto, including listing chats, searching and reading message history, resolving chats, and downloading attachments, with sending available only when explicitly enabled.MIT