telegram-mcp
Allows interacting with Telegram as a user account, reading private chats, sending messages and files, searching messages and public channels, managing contacts, and drafting replies in the user's style.
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., "@telegram-mcplist my recent unread chats"
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.
telegram-mcp
Your Telegram account in an MCP client. Signs in as you, not as a bot: it reads your private chats, and anything it sends comes from you.
Install
Node 22+.
Get API keys: my.telegram.org → API development tools → create an app (platform
Other, rest blank) → copy api_id and api_hash.Sign in — once, in a terminal:
TELEGRAM_API_ID=... TELEGRAM_API_HASH=... npx @vkruglikov/telegram-mcp loginIt asks for your phone, the code Telegram sends, and your 2FA password if you have one. This is a terminal command and not a tool on purpose — as a tool, the code and the password would pass through the model's context and land in chat logs.
Register the server:
claude mcp add telegram \ --env TELEGRAM_API_ID=... \ --env TELEGRAM_API_HASH=... \ -- npx -y @vkruglikov/telegram-mcpClients that read a JSON config instead:
{ "mcpServers": { "telegram": { "command": "npx", "args": ["-y", "@vkruglikov/telegram-mcp"], "env": { "TELEGRAM_API_ID": "...", "TELEGRAM_API_HASH": "..." } } } }Check:
npx @vkruglikov/telegram-mcp status.
logout revokes the session server-side and deletes it locally.
Related MCP server: telegram-mcp
Features
Your account:
| Dialogs, newest first, or only unread |
| Find a dialog by name — |
| Read a chat. Does not mark it read |
| Full-text, one chat or the whole account |
| Delivered immediately, no undo |
| Save an attachment |
| The only tool that marks anything read — the other side sees it |
| Saved contacts |
All of Telegram, not just your chats:
| Channels, groups and people you have never opened |
| Text of every public channel. A few free searches a day; the result says how many are left |
Prompts, shown as slash commands: personalize, draft_reply, catch_up.
Drafting in your voice
Run
/personalize. It callssample_my_messagesto collect messages you sent in recent private chats, then describes the patterns: languages and how you mix them, message length, greetings and sign-offs, punctuation you skip, which emoji and where, recurring phrasings, how formality shifts, and what you never do.It shows the profile before saving. Edit or reject it.
Saved to
~/.telegram-mcp/style.md. Reconnect the server to load it./draft_reply <chat> [intent]writes in that voice and shows the draft. It never sends.
get_style_profile prints the profile, forget_style_profile deletes it.
The profile covers how you write, not what you think. Facts, opinions and commitments stay yours to supply.
Everything stays on your machine
Local process, straight to Telegram, no service in between. Everything lives in
~/.telegram-mcp:
session.db— your login sessionstyle.md— your style profile, if you made onedownloads/— downloaded attachments
No telemetry, no account of ours, no third party. Credentials, session and messages go nowhere else.
Treat session.db like a password. It grants full access to your account without the
password and without 2FA. Never copy it to another machine or into a repo. If it leaks,
revoke it in Telegram → Settings → Devices. Deleting the folder by hand revokes nothing —
use logout.
License
MIT
Available Tools
16 toolsdownload_mediaBIdempotent
Download the media attached to one message. Returns the saved path.
| Name | Required | Description | Default |
|---|---|---|---|
| chat | Yes | Chat identifier from list_chats or search_chats: a numeric chat_id, a @username, or "me" for Saved Messages. Do not invent one. | |
| dest_dir | No | Defaults to /root/.telegram-mcp/downloads | |
| message_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and idempotentHint=true, but description does not disclose side effects (e.g., writing to disk, network usage) beyond stating it downloads and returns a path. With annotations present, the description should add context about file system writes or permissions.
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?
Single sentence of 8 words, front-loaded with the key action and result. No extraneous information; every word earns its place.
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 simple download tool, the description covers the essential purpose and return value. However, it could mention that the message must contain media or that the tool requires network access, but these are implicit. It is complete enough for its complexity.
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 67%, and the main description does not add any additional meaning about parameters beyond what the schema provides. It is a baseline score since description adds no extra clarity.
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?
Description clearly states the verb 'download' and resource 'media attached to one message', and mentions return value 'Returns the saved path'. It distinguishes from siblings like send_file (upload) and search_messages (search) by specifying a focused download action.
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?
No guidance on when to use this tool versus alternatives like send_file or get_history. The description does not mention prerequisites (e.g., needing a message with media) or conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forget_style_profileAIdempotent
Delete the stored writing-style profile.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and readOnlyHint=false, consistent with deletion. Description adds no further behavioral details (e.g., reversibility, scope). For a simple delete, this is adequate but not enriched.
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?
Single sentence, no wasted words. Front-loaded with key action and object.
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 parameterless deletion tool with no output schema, the description is complete enough to understand the primary function. Could mention scope (current user's profile) but not necessary.
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?
No parameters exist, and schema coverage is 100% trivial. Description does not need to add parameter information. Baseline of 4 is appropriate as there is nothing to compensate.
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?
Description clearly states the tool deletes the stored writing-style profile. Verb 'Delete' and resource 'stored writing-style profile' are specific and distinguish from siblings like save_style_profile and get_style_profile.
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?
No explicit when-to-use or when-not-to-use guidance is provided. While the context of siblings implies deletion, there is no direct statement about when this tool should be preferred over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_historyARead-only
Read the most recent messages of a chat, newest first. Read-only: this does not mark anything as read.
| Name | Required | Description | Default |
|---|---|---|---|
| chat | Yes | Chat identifier from list_chats or search_chats: a numeric chat_id, a @username, or "me" for Saved Messages. Do not invent one. | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'Read-only: this does not mark anything as read.' This adds context about a specific side effect (not marking read) beyond the annotation. No contradictions.
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?
The description is two sentences, each adding value. It is front-loaded with the core purpose and key behavioral note. No extraneous words.
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?
Given the tool has no output schema, the description could elaborate on what is returned (e.g., message objects). The limit parameter implies pagination but is not explained. The description is adequate for a simple read tool but leaves some gaps for an agent without additional context.
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 description adds no meaning beyond the input schema for the two parameters. Schema description coverage is 50% (chat has description, limit does not), but the description doesn't explain the limit parameter or its default. For a tool with moderate schema coverage, the description should compensate but fails to do so.
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?
The description clearly states the verb 'Read' and the resource 'most recent messages of a chat, newest first'. It distinguishes from sibling tools like send_message and mark_read by declaring read-only behavior and clarifying it does not mark messages as read.
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 description implies when to use (need chat history) but provides no explicit guidance on when not to use or alternative tools. Sibling tools like search_messages or list_chats could be relevant but are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_style_profileARead-only
Show the stored writing-style profile, if there is one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark as readOnlyHint=true; description adds that it may return nothing if no profile exists, which is useful beyond what annotations provide.
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?
Single sentence of 12 words, no wasted text, perfectly front-loaded with the key action and resource.
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 no-parameter, read-only tool with annotations, the description fully covers the tool's function and behavior (including optional existence).
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?
No parameters exist (schema coverage 100%), so description needs to add no parameter info; baseline 4 applies per guidelines.
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?
Description clearly states verb 'Show' and resource 'stored writing-style profile', distinguishing it from sibling tools like save_style_profile and forget_style_profile.
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 phrase 'if there is one' hints at conditional existence, but no explicit guidance on when to use this tool versus alternatives or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chatsARead-only
List recent dialogs, newest first. Use the returned chat_id for every other tool.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| archived | No | List archived chats instead. | |
| unread_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world. The description adds ordering and chat_id usage, but no additional behavioral details like pagination or return structure.
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 concise sentences with no waste. Front-loaded with action and resource.
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 no output schema and 3 optional parameters, the description is adequate but lacks details on return format or parameter effects.
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 33% and the description does not mention or explain any parameters (limit, archived, unread_only), missing an opportunity to add value.
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?
The description clearly states the tool lists recent dialogs in newest-first order and notes the returned chat_id is used by other tools. It distinguishes from sibling search tools.
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 description implies use for listing recent dialogs but does not explicitly guide when to use this versus search_chats or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsARead-only
List saved contacts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering safety and openness. Description adds no behavioral context beyond the short phrase, which is adequate but not enhancing.
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?
Single, clear sentence with no wasted words. Perfectly concise and front-loaded.
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?
No output schema or return format details. For a simple list, description is minimal but could indicate what fields are returned. Lacks completeness for full autonomy.
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?
No parameters exist, so schema coverage is 100%. Baseline of 4 applies as description carries no parameter burden.
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?
Description 'List saved contacts' clearly states verb and resource. Among sibling tools, all are chat-related (e.g., list_chats, search_messages), making this tool distinct for contacts management.
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?
No explicit guidance on when to use this tool vs alternatives. Usage is implied as a simple listing, but no when-not or context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_readAIdempotent
Mark a chat as read. The other side sees read receipts — this is visible to them.
| Name | Required | Description | Default |
|---|---|---|---|
| chat | Yes | Chat identifier from list_chats or search_chats: a numeric chat_id, a @username, or "me" for Saved Messages. Do not invent one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent and non-read-only, but description adds crucial behavioral context: 'The other side sees read receipts — this is visible to them.' This goes beyond annotations to disclose privacy implications.
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 sentences with no filler. First sentence states purpose, second adds key behavioral insight. Perfectly front-loaded.
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 simple tool with one parameter and no output schema, the description fully covers purpose, parameter semantics, and behavioral implications. Nothing missing given the complexity.
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 100% and the description adds meaningful detail beyond the schema: explains that chat can be numeric, @username, or 'me', and warns 'Do not invent one.' This enriches the schema 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?
Description clearly states 'Mark a chat as read' with a specific verb and resource. It also adds the unique aspect of read receipts being visible to the other side, distinguishing it from other chat manipulation tools.
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?
Description implies usage by stating what it does but does not provide explicit guidance on when to use it versus alternatives or conditions like which chat states apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sample_my_messagesARead-only
Collect messages the user themselves wrote, as raw material for describing how they write. Private chats only, text only, no recipients — this is a style sample, not a transcript.
| Name | Required | Description | Default |
|---|---|---|---|
| chats | No | How many recent private dialogs to draw from | |
| per_chat | No | ||
| min_length | No | Skip anything shorter — "ok", "+", a lone emoji |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it specifies the scope (private chats, text only, no recipients) and the intended use (style sample). Annotations already declare readOnlyHint=true and openWorldHint=true, which are consistent. The description reinforces these with concrete constraints.
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?
The description is extremely concise: two sentences that efficiently convey purpose, constraints, and differentiation. Every word adds value, with no redundancy.
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?
Given the annotations and schema, the description provides essential context: what kind of data (user's own text messages from private chats) and its purpose (style sample). It lacks explicit mention of output format (e.g., whether it returns raw messages or aggregated stats), but given it's a sampling tool, the lack of an output schema is not critical.
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 67% with two of three parameters described (chats and min_length). The description does not add new detail about parameter meaning beyond the schema. The overall purpose context helps interpret the parameters (e.g., 'chats' is number of dialogs to sample), but per_chat lacks any 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?
The description clearly states the tool collects the user's own messages from private chats for style analysis. It specifies 'raw material for describing how they write' and distinguishes itself from transcript-like tools by noting 'no recipients — this is a style sample, not a transcript.' This differentiates it from sibling tools like search_messages or get_history.
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 description provides clear context for when to use the tool: for collecting a writing style sample from private chats, text only. It implicitly excludes use cases needing full transcripts or public chats. However, it does not explicitly mention alternative tools for those cases, such as search_messages for broader search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_style_profileAIdempotent
Store the description of how the user writes. Replaces any previous one. It is loaded on every start and used when drafting on their behalf.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | Markdown describing the writing style |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHint=true and readOnlyHint=false. The description adds behavioral context: it replaces any previous profile and is loaded on every start for drafting. This supplements the annotations without contradiction.
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 short sentences, no redundant information. The verb 'Store' is front-loaded, making the purpose immediately clear.
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?
Given the simple schema (1 parameter, no output schema) and annotations, the description is sufficiently complete. It explains the effect, overwrite behavior, and usage context.
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 100% with one parameter described. The description adds no additional semantics beyond the schema's field description for 'profile'.
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?
The description uses the verb 'Store' and clearly identifies the resource as 'the description of how the user writes'. It distinguishes from sibling tools like 'get_style_profile' and 'forget_style_profile' by specifying the action of storing.
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 description does not explicitly state when to use this tool vs alternatives like 'get_style_profile' or 'forget_style_profile'. It implies usage through the verb 'Store' but lacks explicit context or caveats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_chatsARead-only
Find dialogs by title or username. Matches across scripts, so "Вадим" finds "Vadim" and "Sasha" finds "Саша". Several chats often match a common first name — check the results and pick the right chat_id before sending anything.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds cross-script matching behavior and warns about multiple matches, enriching the behavioral understanding beyond annotations.
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 sentences with no wasted words. The most important information (purpose and cross-script matching) is front-loaded.
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?
Adequate for a read-only search tool given the annotations and sibling context, but lacks information about output format (e.g., does it return chat_id, title?) and pagination.
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 description mentions searching by 'title or username', which relates to the 'query' parameter, but does not explain the 'limit' parameter. With 0% schema description coverage, more parameter detail is needed.
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?
The description clearly states the tool finds dialogs by title or username and gives examples of cross-script matching. It distinguishes from siblings like 'list_chats' and 'search_messages' by targeting chat entities.
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?
Provides a warning to check results for the correct chat_id before using, giving context for safe use. However, it lacks explicit guidance on when to use this tool vs alternatives like 'search_public_chats'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_messagesARead-only
Full-text search over messages, inside one chat or across the whole account when chat is omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| chat | No | Chat identifier from list_chats or search_chats: a numeric chat_id, a @username, or "me" for Saved Messages. Do not invent one. | |
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds scope constraints but does not address pagination, ordering, or return format. No contradiction.
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?
Single sentence, front-loaded with key information, no wasted words.
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?
Missing details on result format, pagination behavior, ordering, and error handling. A search tool with 3 parameters and no output schema should provide more context.
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 33% (only 'chat' has a description). The tool description does not explain 'query' or 'limit' beyond the obvious, failing to compensate for low coverage.
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?
The description clearly states 'Full-text search over messages' with a specific verb and resource, distinguishing from sibling tools like 'search_chats' and 'search_public_posts'.
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 description indicates when to use ('inside one chat or across the whole account when chat is omitted') but lacks explicit when-not-to-use or alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_public_chatsARead-only
Search all of Telegram — not the user's own dialogs — for public channels, groups, bots and users by name or @username. Use this to find a chat the user has never opened; use search_chats for the ones they already have. Results are split into "mine" (their own contacts and dialogs) and "public" (everyone else). Public results are strangers: several channels share one name, and the flags say which is verified and which is flagged as a scam.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Name, topic or @username. Telegram matches usernames by prefix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, openWorldHint), description discloses that public results are strangers, multiple channels share names, and flags indicate verification or scam. No contradiction with annotations.
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?
Four sentences, front-loaded with main purpose, no redundant words. Efficient and clear.
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?
Covers purpose, usage, param details, and result structure (mine vs public, flags). Lacks explanation of exact return format, but output schema not provided. Adequate for a read-only 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 covers query description; description adds 'Telegram matches usernames by prefix' for query. Limit parameter only has schema defaults, no extra description. Given 50% coverage, description adds modest value.
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?
Description clearly states it searches all of Telegram for public channels, groups, bots, and users by name or @username. It distinguishes from sibling tool search_chats by specifying this tool is for chats the user has never opened.
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 says when to use (find chat user has never opened) and when to use search_chats instead. Also explains result split into 'mine' and 'public', giving context on public nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_public_postsARead-only
Full-text search over posts in every public channel on Telegram, whether or not the user follows them. This is the whole network, not the account: use search_messages for the user's own chats. Telegram rations these searches — the result reports how many free ones are left today, so do not spend them on repeated near-identical queries.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Keywords, or a #hashtag. Matches the text of public posts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, openWorldHint), the description discloses the functional quirk of daily search rations and advises against repeated near-identical queries. No contradictions with annotations.
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 sentences, no redundant words, front-loaded with core purpose and key constraints. Every sentence earns its place.
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?
Given no output schema, the description mentions rationing info returned, providing some output context. Could be improved by hinting at pagination or result structure, but still sufficient for a 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 coverage is 50% (query described, limit not). The description does not add parameter details beyond what the schema provides. The limit parameter's purpose is inferable but not explicitly clarified.
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?
The description clearly states the verb (full-text search), resource (posts in every public channel), and scope (whole network, not user's chats), and explicitly distinguishes from the sibling tool 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 tells when to use this tool vs alternative (use search_messages for user's own chats) and warns about rationing, guiding appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_fileADestructive
Upload a local file to a chat. Delivered immediately, no undo.
| Name | Required | Description | Default |
|---|---|---|---|
| chat | Yes | Chat identifier from list_chats or search_chats: a numeric chat_id, a @username, or "me" for Saved Messages. Do not invent one. | |
| path | Yes | Absolute path to a local file | |
| caption | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds 'Delivered immediately, no undo', providing behavioral context beyond annotations (immediate delivery, irreversibility). This aligns with the destructive hint and adds useful nuance, though details like file size limits are omitted.
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?
The description is two sentences, front-loaded with the core action, and no superfluous words. Every sentence adds value: purpose first, then behavioral impact. Structure is optimal for quick comprehension.
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?
Given the tool's simplicity (3 params, no output schema), the description covers essential aspects: action, resource, delivery, and irreversibility. It does not mention file size limits or supported types, but for a basic upload tool, it provides sufficient context for an agent to use it correctly.
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 67% (2 of 3 parameters described). The description does not add parameter meaning beyond schema: 'chat' is well-described in schema, 'path' minimally, 'caption' has no description. Baseline at 3 is appropriate; no compensation from description for the missing caption parameter.
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?
The description clearly states 'Upload a local file to a chat', specifying the verb upload and resource local file. It distinguishes from sibling tools like send_message or download_media, though no explicit differentiation is provided. The purpose is clear and actionable.
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 description implies usage for uploading local files to chats but lacks explicit guidance on when to use versus alternatives (e.g., send_message for text or remote media). No when-not-to-use or prerequisite conditions are stated, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageADestructive
Send a text message. It is delivered immediately and there is no undo — confirm the chat_id came from list_chats or search_chats first.
| Name | Required | Description | Default |
|---|---|---|---|
| chat | Yes | Chat identifier from list_chats or search_chats: a numeric chat_id, a @username, or "me" for Saved Messages. Do not invent one. | |
| text | Yes | ||
| reply_to | No | message_id to reply to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses immediate delivery and no undo, aligning with destructiveHint annotation. Adds context beyond annotations without contradiction.
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 sentences front-load purpose and key caveat. No fluff; every word earns its place.
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?
Adequate for a simple tool but lacks description of return value or error conditions. No output schema, so more context on response would help.
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 covers 67% of parameters with descriptions. Tool description reinforces chat_id validation but adds no new detail for text or reply_to beyond schema.
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?
The description clearly states the tool sends a text message, with specific verb and resource. It distinguishes from sibling tools like send_file by focusing on text.
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?
Provides explicit guidance to confirm chat_id from list_chats or search_chats, implying when to use. Lacks explicit mention of alternatives but the warning is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiARead-only
Show which Telegram account this server is signed in as.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description adds only minimal confirmation that this is a read-only operation returning account identity. It does not add significant behavioral context beyond what annotations provide.
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?
The description is a single sentence that is front-loaded and contains no extraneous words. It communicates the purpose efficiently.
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?
Given the tool's simplicity (no parameters, no output schema, clear annotations), the description fully covers what an agent needs to understand its purpose. No additional context is necessary.
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 zero parameters and 100% schema coverage, the baseline is 4. The description does not need to add parameter information, and it is clear that no inputs are required.
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?
The description clearly states that the tool shows which Telegram account the server is signed in as, using a specific verb ('show') and resource ('Telegram account'). It distinguishes itself from sibling tools like list_chats or search_messages, which serve different purposes.
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 description implies usage for checking the current authenticated user, but does not explicitly state when to use this tool vs alternatives (e.g., when context about the current account is needed, or that no other tool provides this info). No exclusions or prerequisites are mentioned.
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.
16 tool updates
v0.1.1- First observed
download_media - First observed
forget_style_profile - First observed
get_history - First observed
get_style_profile - First observed
list_chats - First observed
list_contacts - First observed
mark_read - First observed
sample_my_messages - First observed
save_style_profile - First observed
search_chats - First observed
search_messages - First observed
search_public_chats - First observed
search_public_posts - First observed
send_file - First observed
send_message - First observed
whoami
TDQS
Scored across 16 tools
Each tool has a distinct purpose: account identity, chat listing/searching by scope, messaging, file/media operations, read status, and style profiling. No two tools overlap in function; searching is divided by scope (own chats, public channels, public posts) to avoid ambiguity.
Most tools follow verb_noun snake_case pattern (list_chats, search_messages, send_file). 'whoami' is a minor deviation as a single word command. Overall consistent and predictable.
With 16 tools, the set covers the core Telegram operations without being overly large. The count is slightly above the typical 3-15 range but still well-scoped for a messaging server that includes a style profiling subsystem.
The tool surface covers listing, searching, sending, reading, and style profiling. However, common CRUD operations like message editing, deletion, reactions, and chat management (create/leave/mute) are missing, which agents might need.
Maintenance
Related MCP Connectors
Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.
Unofficial Telegram MCP server — read, search, reply and react in your own Telegram account.
Remote MCP server for AI.TV creators — delegate account operations to your AI agent over MCP.
Governed personal world model and memory for your AI agent. Pair once, connect over MCP.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables full access to your personal Telegram account via MCP, allowing reading, sending, and searching messages, managing chats, and retrieving user information through natural language commands.18323MIT
- FlicenseBqualityBmaintenanceProvides full access to a personal Telegram account via MTProto, enabling MCP clients to read chats, send messages, manage media, and more.70-
- AlicenseBqualityCmaintenanceEnables MCP clients to operate a Telegram account as a userbot, providing tools for reading and sending messages, searching chats and contacts, managing media, and performing other account actions via MTProto with a locally encrypted session.28MIT
- FlicenseNot gradedqualityCmaintenanceEnables users to interact with their own Telegram account through MTProto, supporting chat listing, message reading and searching, sending messages, and fetching contacts via MCP tools.-