Skip to main content
Glama
briejhxh

codex-telegram

by briejhxh

Codex Telegram

Русская версия

codex-telegram is a local Model Context Protocol server and Codex plugin for a personal Telegram account. It uses TDLib/MTProto, not the Bot API or browser automation.

The server runs on your computer. Telegram API credentials, TDLib database, authorization session, and downloaded media are stored in a private per-user directory and are never sent to a third-party service by this project.

Status: early release. Use a separate Telegram account for development and test any write workflow with Saved Messages first.

Features

  • Read account details, chats, unread counts, and paginated chat history.

  • Diagnose local configuration, TDLib session, and authentication problems without exposing secrets.

  • Resolve a chat by name or @username, identify exact matches, and read its pinned message.

  • Search chats and messages, including contacts and public usernames.

  • Find documents, media, voice notes, and links in a specific chat without downloading them.

  • Send and reply to messages, upload files, and download selected media.

  • Inspect bot inline keyboards and press safe callback buttons.

  • Add or remove an explicitly approved emoji reaction.

  • Edit or delete only messages sent by the authenticated account, with explicit confirmation.

  • Keep all secret material and TDLib state outside the repository by default.

The server deliberately does not click URL, login, web-app, game, payment, or password buttons. It does not scrape Telegram Web or ask third-party bots for account/contact IDs.

Related MCP server: tlgrm

Prerequisites

  • Node.js 20 or later.

  • pnpm 9 or later (corepack enable enables the version bundled with Node.js).

  • A Telegram api_id and api_hash from my.telegram.org.

  • Codex Desktop, if you want to use the plugin UI.

Install from GitHub

git clone https://github.com/aagafon1215-source/codex-telegram.git
cd codex-telegram
corepack enable
pnpm install --frozen-lockfile
pnpm run check
pnpm run setup
pnpm run login

pnpm run setup asks for the Telegram API ID and hash and stores them in a user-owned configuration file. It never writes credentials into the clone. pnpm run login asks for your phone number, Telegram code, and, if applicable, two-factor password.

On Windows, state is stored in %LOCALAPPDATA%\codex-telegram. On macOS/Linux it is stored in ~/.local/state/codex-telegram. Set TG_CONFIG_DIR before running setup to use another directory. You can also set TG_CONFIG_FILE, TG_DATABASE_DIR, TG_FILES_DIR, or TG_DOWNLOADS_DIR to absolute paths. Explicit downloads accept a file name only, are saved under TG_DOWNLOADS_DIR, and never overwrite a file. Downloads are capped at 100 MiB by default; set TG_MAX_DOWNLOAD_BYTES to a positive byte value to change the cap.

For local development only, copying .env.example to .env is supported. Set TG_USE_DOTENV=1 to opt in to loading it; this prevents a cloned repository from silently becoming the location of a Telegram session. Never commit that file.

If you used an older checkout that stored API credentials in .env, run pnpm run migrate-legacy-config once. It copies only the API credentials to the private configuration file and never overwrites an existing one; then run pnpm run login to create a session in the private state directory.

Add it to Codex

The repository is a local plugin source. After installing dependencies and building it, add the clone through your Codex local marketplace/plugin workflow. The MCP manifest uses portable settings:

{ "command": "node", "args": ["dist/index.js"], "cwd": "." }

Codex starts the server itself; do not run pnpm start at the same time. TDLib permits only one process to use a session database. Start a new Codex task after installing or updating the plugin.

If node or pnpm is unavailable because you only have Codex Desktop installed, scripts/run-with-codex-runtime.ps1 is a Windows-only convenience launcher:

.\scripts\run-with-codex-runtime.ps1 setup
.\scripts\run-with-codex-runtime.ps1 login
.\scripts\run-with-codex-runtime.ps1 build

Tool safety model

Read tools are read-only. telegram_send_message, telegram_reply_message, and telegram_send_file change external state; the included Codex skill requires an explicit recipient and exact content confirmation before they are called.

telegram_click_inline_button can trigger bot state changes. It may be used only after the user has explicitly authorized the requested button workflow. The tool accepts only callback buttons and refuses high-risk button types.

telegram_edit_own_message and telegram_delete_own_message can act only on outgoing messages from the authenticated account. Both require confirmation; deletion is marked destructive and asks Telegram to revoke the message for everyone when Telegram permits.

If Telegram is unavailable, begin with telegram_health. It reports only safe local status, the effective local TDLib paths, and a remediation hint; it never returns API credentials, login codes, or message content. A locked session is detected after a bounded 15-second connection attempt.

The plugin returns only the data requested by a tool. Avoid asking it to paste large private histories into a task, and do not paste Telegram login codes or API credentials into chat.

Development

pnpm run typecheck
pnpm run test
pnpm run build
pnpm run check

Run the server manually only for MCP-client development:

pnpm start

Logs are written to stderr so stdout remains valid MCP JSON-RPC.

Release checklist

  1. Run pnpm install --frozen-lockfile && pnpm run check.

  2. Run pnpm run plugin:validate.

  3. Verify git status --ignored contains no credentials, TDLib database, downloaded files, or dist/ output.

  4. Review SECURITY.md and docs/PRIVACY.md.

  5. Create a version tag only after testing login and a read-only tool with a test account.

Contributing and security

Please read CONTRIBUTING.md. For vulnerabilities, follow SECURITY.md instead of opening an issue with sensitive details.

License

MIT

Available Tools

20 tools
telegram_click_inline_buttonA

Press a Telegram bot inline callback button by row and column. This sends a callback query and may change bot state. Callback buttons only; payments, URL/login, web-app, game, and password buttons are blocked.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowYes
columnYes
chat_idYes
message_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already set readOnlyHint=false and destructiveHint=false, and the description adds that clicking sends a callback query and may change bot state. This goes beyond the structured hints and helps the agent anticipate side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences convey the action, the primary behavior, and the exclusions without redundancy. The core action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a small action tool with no output schema, the description gives the key context: what a click does, that bot state may change, and which button types are unsupported. It could add a pointer to telegram_get_inline_buttons for discovering button positions, but it is otherwise sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description is the only textual source for parameter meaning. It clarifies that row and column locate the button, and chat_id/message_id are self-evident message identifiers, but it does not document all four parameters in detail or explain indexing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb ('Press') and a precise resource ('a Telegram bot inline callback button'), then narrows scope by row and column. It also distinguishes this from siblings by explicitly limiting itself to callback buttons and naming blocked button types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear when-not guidance: only callback buttons, with payments, URL/login, web-app, game, and password buttons excluded. It stops short of naming a sibling alternative as the right choice for those other button kinds, so it doesn't earn a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_delete_own_messageA
Destructive

Delete one message previously sent by the authenticated Telegram account, revoking it for everyone when Telegram permits. This is destructive and requires explicit confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
message_idYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description explicitly warns 'This is destructive and requires explicit confirmation.' It also clarifies the revocation behavior, providing transparency about the irreversible impact on all chat participants.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two sentences covering function, scope, and destructive nature. No unnecessary words or redundant details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description need not cover return values. It includes essential context about own-message restriction and revocation scope, though it omits potential limitations (e.g., message age constraints or errors for non-own messages) that could be relevant but are not strictly required for a delete operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no descriptions for chat_id or message_id, and the description adds no explanatory text. However, the parameter names are self-explanatory in context, and the exclusiveMinimum constraint on message_id provides some guidance, so the lack of compensation is acceptable but not ideal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: deleting a message previously sent by the authenticated account, and adds the specific effect of revoking it for everyone when Telegram permits. This fully distinguishes it from sibling tools like edit_own_message or send_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives implicit usage guidance by specifying that it only works on the authenticated account's own messages and that it is destructive. While it doesn't explicitly compare with alternatives, the scope and consequence are clear enough for an agent to decide when to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_download_fileA

Download media attached to one Telegram message. destination, when supplied, must be a new file name only; it is saved inside the configured Telegram downloads directory and never overwrites an existing file.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
message_idYes
destinationNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It explicitly states a non-destructive behavior (never overwrites an existing file), which is valuable. It does not mention other side effects like authentication requirements or rate limits, but the key safety aspect is covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first states the core action, the second lists the key parameter constraint. It is concise, well-structured, and free of unnecessary details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficient for an agent to understand the tool's functionality and main parameters. It does not cover edge cases (e.g., no media attached, error behavior), but given the sibling tools and the clarity of the purpose, it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no descriptions for parameters, but the description explains the constraints for 'destination' (new file name, specific directory). 'chat_id' and 'message_id' are implicitly clear from the tool's purpose, so the description adds reasonable meaning beyond parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool downloads media attached to a specific message, distinguishing it from sending files or retrieving messages. It is specific about the action and the target resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides practical constraints: destination must be a new file name, saved in a configured directory, and never overwrites. However, it does not explicitly compare when to use this tool over other search or retrieval tools, though the purpose is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_edit_own_messageA

Edit one text message previously sent by the authenticated Telegram account. This changes external state: require explicit confirmation of the chat, message, and replacement text.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
chat_idYes
message_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds that the operation changes external state and requires explicit confirmation, which is a procedural trait not present in annotations. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence states the action and target, the second warns about external state change and confirmation. Information is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter mutation with no output schema, the description covers the essential context: ownership (authenticated account), message type (text), and the need for confirmation. It does not cover error cases or time limits, but the sibling tools and schema provide enough context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must supply meaning. It maps the three parameters to 'chat', 'message', and 'replacement text', giving semantic roles to chat_id, message_id, and text. It does not elaborate on constraints or how to obtain chat_id/message_id, but the schema provides the validation rules.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Edit') and resource ('one text message previously sent by the authenticated Telegram account'), clearly distinguishing it from siblings like send_message and delete_own_message. The scope is explicit: only the authenticated account's own messages. This leaves no ambiguity about the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the target condition: a message previously sent by the authenticated account, which tells the agent when this tool is appropriate and implicitly rules out messages from others. It also requires explicit confirmation of chat, message, and replacement text, serving as a precondition. However, it does not explicitly compare against alternatives like delete_and_resend or mention 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.

telegram_get_chatA
Read-only

Get details for one Telegram chat by its exact chat_id. For a private chat, returns the other person's Telegram user_id and profile fields when Telegram makes them available.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the safety profile, and the description adds a useful behavioral nuance: for private chats it may return the other person's user_id and profile fields, but only when Telegram makes them available. It does not describe group/channel return details or error behavior, but these are minor gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler and the primary action is front-loaded. The private-chat caveat is meaningful and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only lookup with no output schema, the description covers the essential invocation requirements and one important return variance. It omits group/channel return specifics and not-found behavior, but these are secondary to correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema defines chat_id as a required integer with no description (0% coverage). The description adds the key 'exact' matching semantics and clarifies this is a single-chat lookup, but it does not explain how to obtain the chat_id or any Telegram-specific ID conventions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (get details), a specific resource (one Telegram chat), and a hard lookup condition (exact chat_id). This clearly distinguishes it from sibling tools like telegram_list_chats, telegram_search_chats, and telegram_resolve_chat.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by its exact chat_id' clearly implies the tool should be used when the caller already has the precise numeric identifier. It does not explicitly name alternatives or say when not to use it, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_get_inline_buttonsA
Read-only

List the inline buttons attached to one Telegram message. Use row and column values from this result with telegram_click_inline_button.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
message_idYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description indicates a read-only operation ('List') and mentions that the result contains row and column values, adding some behavioral context. However, it does not disclose potential errors, edge cases, or output format details beyond the annotations' readOnlyHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using only two sentences with no redundant information. It is well-structured and immediately communicates purpose and follow-up usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only tool, the description provides sufficient context: what it lists, that it relates to a single Telegram message, and how the result feeds into a sibling tool. It does not fully describe output structure, but the reference to row and column values covers the essential need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain the parameters chat_id or message_id. While their names are somewhat self-explanatory, the description does not compensate for the lack of schema-level documentation, especially given the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and the specific resource ('inline buttons attached to one Telegram message'). It also distinguishes itself from sibling tools like telegram_get_messages by focusing on inline buttons and explicitly linking to telegram_click_inline_button.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: to obtain row and column values needed for telegram_click_inline_button. It stops short of explicitly mentioning when not to use it or naming alternative tools, but the follow-up instruction provides strong usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_get_meA
Read-only

Get the authenticated personal Telegram account. The phone number is intentionally omitted for privacy.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a privacy-relevant behavior beyond the readOnlyHint annotation: the phone number is intentionally omitted. This adds useful context about what will not be returned. There is no contradiction with the read-only annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two brief sentences with no filler. The main action is front-loaded, and the additional privacy note earns its place by disclosing an important omission.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only identity tool, the description is largely sufficient. It could be slightly more explicit about what fields are returned besides the phone number omission, but the low complexity and annotation coverage make the description adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description has no parameter semantics to clarify. The baseline of 4 applies because no param documentation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' and a clear resource: the authenticated personal Telegram account. It is clearly distinct from sibling tools, which focus on chats, messages, and media.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this tool is for retrieving identity details of the current authenticated account, and the sibling tool names show everything else targets chats or messages. It provides clear context, though it does not explicitly state exclusions or when to prefer alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_get_messagesA
Read-only

Read up to 100 messages in a known Telegram chat. The tool keeps requesting TDLib history internally when TDLib returns a partial page. Returns text and metadata only; media is not downloaded automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
chat_idYes
from_message_idNoStart before this message ID for older history

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes safety, and the description adds valuable behavior beyond that: it discloses internal repeated TDLib history requests and states that media is not automatically downloaded. This gives the agent a clearer model of the tool's runtime behavior. It could add ordering or error behavior, but the key traits are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences front-load the core purpose and then add the most important behavioral caveats. There is no fluff or repetition of schema details; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description covers what it returns ('text and metadata only'), its limit, and its internal pagination behavior. It is sufficiently complete for an agent to invoke correctly with chat_id and optional parameters, though exact message ordering and the meaning of a partial result are not spelled out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, and only from_message_id has a schema description. The tool description adds some meaning for limit ('up to 100 messages') and chat_id ('known Telegram chat'), but does not explicitly explain optionality or how the parameters interact. It partially compensates for the low schema coverage but leaves room for more clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Read'), the resource ('messages'), and the scope ('up to 100 messages in a known Telegram chat'). This inherently distinguishes it from siblings like telegram_search_messages or telegram_get_chat, even though it does not name an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'in a known Telegram chat' implies the tool is for retrieving messages when a chat_id is already available, and not for discovery/search. However, there is no explicit when-to-use, when-not-to-use, or mention of alternative sibling tools such as telegram_search_messages.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_get_pinned_messageA
Read-only

Read the currently pinned message in a known Telegram chat. Returns text and metadata only.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes safety, and the description adds that only text and metadata are returned. However, it does not disclose behavior when no message is pinned, what happens with an invalid chat_id, or any error/edge-case behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. The verb, object, and output scope are all presented immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity—one required integer parameter and read-only behavior—the description covers the essential purpose, input constraint, and return scope. The absence of an output schema leaves the exact response shape unspecified, but the simple nature of the tool makes this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines chat_id as an integer with 0% description coverage. The description adds the useful 'known Telegram chat' constraint, implying the ID must refer to an already resolved chat, but it does not explain the ID format or how to obtain it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Read'), the specific resource ('currently pinned message'), and the context ('in a known Telegram chat'). It is easily distinguished from sibling tools like get_messages or search_messages because it explicitly targets the pinned message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance about when to use this tool versus alternatives, nor any mention of when-not-to-use it. The phrase 'known Telegram chat' implies a prerequisite, but no alternative tools or conditions are referenced.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_get_unreadA
Read-only

List recent Telegram chats that have unread messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is consistent with the readOnlyHint annotation and adds useful context about filtering to recent unread chats. However, it does not disclose additional behavioral details such as ordering, pagination, whether unread state is affected, or authentication requirements, though the annotation already covers the read-only safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly worded sentence with no filler or repetition. The core action and filtering criterion are front-loaded and every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with one optional parameter and no output schema, the description provides enough context for an agent to understand the primary purpose and invoke the tool appropriately. It does not specify output shape or 'recent' semantics, but the low complexity and readOnlyHint mitigate the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, and the description does not mention the 'limit' parameter at all. While the parameter name and constraints are somewhat self-explanatory, the description fails to compensate for the low schema coverage by clarifying the parameter's meaning, default, or effect on the result set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('Telegram chats') with a clear filter ('that have unread messages'), making its purpose immediately understandable. It also inherently distinguishes itself from sibling tools like telegram_list_chats and telegram_get_chat by focusing specifically on unread chats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given about when to use this tool versus alternatives such as telegram_list_chats or telegram_search_chats. The intended usage is only implied by the description and tool name, with no exclusions, conditions, or preference signals.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_healthA
Read-only

Diagnose local Telegram plugin setup without exposing credentials or message data. Optionally verifies the saved TDLib session.

ParametersJSON Schema
NameRequiredDescriptionDefault
check_connectionNoConnect to TDLib and verify the saved Telegram session; defaults to true.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already covering safety, the description adds meaningful context by stating that credentials and message data are not exposed. It also discloses that the optional check_connection parameter verifies the saved TDLib session, clarifying the tool's behavioral scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences deliver the purpose, the safety guarantee, and the optional verification behavior with no redundancy. The core diagnostic purpose is front-loaded, and every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only health diagnostic with one optional parameter and no nested objects, the description is largely complete. It could specify what form the diagnostic result takes, but the absence of an output schema and the straightforward nature of a health check keep this from being a significant gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is fully documented in the schema with a description and default, so the schema carries the parameter semantics. The description adds marginal context by linking check_connection to session verification, but no additional depth is needed beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Diagnose') and a clear resource ('local Telegram plugin setup'), making the tool's purpose unambiguous. It also distinguishes this tool from all sibling Telegram operations, which are focused on data access or messaging rather than setup health.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this tool is for diagnosing local plugin setup issues, which is distinct from the sibling tools' data-oriented functions. It does not explicitly name alternatives or exclusions, but the context is strong enough that an agent would know when to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_list_chatsA
Read-only

List recent Telegram chats, groups, channels, and Saved Messages. Use search when the user names a person or a chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of chats (default 30, max 100)

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds useful context about 'recent' chats and the inclusion of Saved Messages, but does not disclose sorting or pagination behavior, which is minor for this tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The action and scope are front-loaded, and the usage guidance follows immediately. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with one optional parameter, the description plus schema is sufficient for correct invocation. It clearly scopes the tool, distinguishes it from the search sibling, and the return shape is reasonably implied by 'List recent Telegram chats'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with the single 'limit' parameter fully documented including default and maximum. The description does not need to repeat parameter details, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and a clear resource scope: recent Telegram chats, groups, channels, and Saved Messages. It also distinguishes itself from telegram_search_chats by explicitly defining when to search instead, so an agent can tell it apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to use search when the user names a person or a chat, naming the alternative tool and providing a clear routing condition. This gives concrete guidance for when list is not appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_react_to_messageA

Add or remove your emoji reaction on one Telegram message. This changes external state: use only after the user explicitly confirms the chat, message, emoji, and whether it should be added or removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
emojiYes
removeNo
chat_idYes
message_idYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that the operation 'changes external state', which goes beyond the raw annotations and explains why confirmation is required. The description also implies a user-driven safety rule. It does not mention failure behavior or response format, but for a simple state-changing tool the disclosure is meaningful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with the core operation front-loaded and the safety constraint immediately after. Every sentence earns its place and there is no redundant restating of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple four-parameter tool with no output schema, the description covers the essential purpose and the confirmation prerequisite. However, it leaves the optional `remove` parameter's default behavior and the expected return value unspecified, so it is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description partially compensates by mapping 'chat, message, emoji, and whether it should be added or removed' to the parameters and clarifying the `remove` boolean's purpose. It does not specify what happens when `remove` is omitted or provide additional format-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Add or remove your emoji reaction') on a specific resource ('one Telegram message'), which is clearly distinct from all sibling tools. The second sentence also reinforces the exact entities involved: chat, message, emoji, and action type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides a precondition: use only after the user confirms the chat, message, emoji, and whether to add or remove the reaction. It does not name alternatives or when-not-to-use conditions, but the confirmation requirement gives clear context for safe invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_reply_messageA

Reply to a specific Telegram message. This changes external state: call only after user confirmation of recipient and text.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
chat_idYes
reply_to_message_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It explicitly states that the tool 'changes external state,' which complements the annotation readOnlyHint=false. It also adds a meaningful operational caution about user confirmation that is not present in the annotations. No contradiction with the annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, each earning its place. The core action is front-loaded, followed immediately by the critical usage caution. There is no filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter mutation tool with no output schema, the description provides purpose, external-state warning, and a clear invocation condition. It could add guidance on the relationship between chat_id and reply_to_message_id, but overall it is sufficiently complete 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description partially compensates by mapping key concepts: 'recipient' hints at chat_id, 'text' maps to text, and 'specific Telegram message' maps to reply_to_message_id. However, it does not clarify that reply_to_message_id must belong to the same chat or explain how to obtain these IDs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Reply to a specific Telegram message.' This clearly distinguishes the tool from send_message, react_to_message, and other sibling tools, even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit precondition: call only after user confirmation of recipient and text. It implies this is the correct tool for replying to an existing message rather than sending a new one, though it does not explicitly name alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_resolve_chatA
Read-only

Resolve a person, group, channel, or @username into candidate chat IDs for later read tools. This never sends a message.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description explicitly says 'never sends a message' and mentions returning 'candidate' IDs, implying a non-destructive, multi-result behavior. This adds useful transparency not present in the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise, information-dense sentences with no redundant phrasing. Every word adds value, efficiently covering purpose and a key safety aspect.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description covers the essential purpose and safety guarantee. It does not detail the return format or error behavior, but these are likely predictable from the context of sibling tools and the term 'candidate chat IDs'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The parameter names 'query' and 'limit' are self-explanatory, and the description hints at accepted input formats (person, group, channel, @username). However, it does not specify the exact meaning of 'limit' or how the query is matched, leaving some ambiguity. Schema has no descriptions, so more detail would have been helpful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool's function: resolving a person, group, channel, or @username into chat IDs. The phrase 'for later read tools' distinguishes its role from other tools, making its purpose specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates when to use the tool—before read tools that require chat IDs—and notes that it never sends a message, hinting at safe read-only usage. It does not explicitly contrast with alternatives like search_chats, but the workflow context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_search_chatsA
Read-only

Find people, groups, channels, or Saved Messages by name, username, or title. Private-chat results include the contact's Telegram user_id where available. Before sending to an ambiguous name, search and confirm the intended chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals a safe read operation, and the description adds useful behavioral detail: private-chat results include the contact's user_id where available, and the tool is meant for disambiguating recipients before sending. No contradiction exists. The description could add scope limitations or result pagination, but with the annotation covering safety, this is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, with the primary purpose in the first sentence and only functional extras after it. The user_id detail and usage advice both earn their place. There is no filler, repetition, or ambiguity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only search with no output schema, the description covers what the tool searches, how the query is interpreted, one key return detail (user_id), and the recommended workflow. It is slightly light on the exact shape of results beyond user_id, but the simplicity of the tool and presence of annotations make it adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of parameter meaning. It explains the required 'query' parameter well by defining it as name, username, or title. However, 'limit' is left undescribed; only the schema's numeric min/max constraints hint at its purpose, and the description does not mention result count or default behavior. This is partial compensation, not full.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb 'Find' and clearly delimits the resource: people, groups, channels, or Saved Messages searchable by name, username, or title. This distinguishes it from siblings such as telegram_search_messages (message content) and telegram_list_chats (listing existing chats). It also adds a distinctive behavior—returning user_id for private chats—which further clarifies the tool's role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: 'Before sending to an ambiguous name, search and confirm the intended chat.' This tells the agent when this tool is the right choice. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of a fully explicit routing guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_search_mediaA
Read-only

Find recent photos, videos, documents, audio, voice notes, animations, or URL messages inside one known chat. Returns message metadata only; no media is downloaded automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
limitNo
queryNo
chat_idYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description clearly discloses that no media is downloaded automatically and only message metadata is returned, fully revealing side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise, information-dense sentences with no filler or redundancy; the essential purpose and side-effect constraint are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for basic intent but lacks guidance on how 'query' filters results and what 'limit' controls. No output schema exists, so return metadata is only briefly described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description must explain parameters. It partially covers 'kind' by enumerating media types and implies 'chat_id' via 'known chat', but fails to explain 'query' and 'limit' entirely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool finds recent media messages of specific types within a single known chat, and explicitly distinguishes itself from file download by noting it returns metadata only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (targets media in a known chat) but does not explicitly contrast with sibling tools like telegram_search_messages or telegram_download_file, leaving some selection ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_search_messagesA
Read-only

Search Telegram message text globally, or inside a supplied chat_id. Use this to locate a topic, deadline, specification, or file discussion.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
chat_idNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint=true annotation is not contradicted and already covers the safety profile. The description adds useful scoping context (global vs chat-scoped search), but it does not disclose behavioral details beyond that, such as whether only accessible chats are searched, result ordering, or how matches are returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler. The core action is front-loaded, the scoping modifier comes second, and the use-case sentence earns its place by helping an agent decide when to invoke the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate but with gaps: there is no output schema, so the description is the only place an agent could learn what results look like, and it remains silent on that. The limit parameter is undocumented, and there is no mention of ordering or pagination behavior, which matters when locating a specific deadline or topic.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description must compensate for the undocumented parameters. It explicitly explains chat_id ('inside a supplied chat_id') and implicitly explains query ('Search Telegram message text'), but it says nothing about the limit parameter, which remains unexplained by both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Search'), a clear resource ('Telegram message text'), and two scopes ('globally' vs 'inside a supplied chat_id'). It distinguishes itself from sibling tools like telegram_search_chats and telegram_search_media by anchoring on message text, and the use cases (topic, deadline, specification, file discussion) sharpen what the tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this to locate a topic, deadline, specification, or file discussion' gives actionable context on when the tool is appropriate. However, it does not explicitly state when NOT to use it or name alternatives such as telegram_search_chats/telegram_search_media, leaving some sibling differentiation to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_send_fileA

Send a local file through the personal Telegram account. This changes external state: call only after the user explicitly confirms recipient, file, and caption.

ParametersJSON Schema
NameRequiredDescriptionDefault
captionNo
chat_idYes
file_pathYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states 'This changes external state,' which complements the annotations readOnlyHint=false. It also adds a meaningful safety condition requiring explicit user confirmation, going 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The primary action is stated first, and the critical side-effect warning and user-confirmation requirement are included without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the action, side effect, and consent gate, which is sufficient for a simple send-file tool. It does not describe response or error behavior, but this is not essential for correct invocation given the straightforward parameter schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for parameter meaning. It maps 'recipient, file, and caption' to chat_id, file_path, and caption, but it does not explain what a chat_id is, what file_path should contain, or any path/type requirements.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Send a local file through the personal Telegram account.' This clearly differentiates the tool from siblings like telegram_send_message, telegram_reply_message, and telegram_download_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit usage condition: 'call only after the user explicitly confirms recipient, file, and caption.' This is clear contextual guidance, though it does not explicitly mention alternatives or when not to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_send_messageA

Send text through the personal Telegram account. This changes external state: call only after the user has explicitly confirmed both recipient chat and exact message.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
chat_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states that the tool 'changes external state', which adds important behavioral context beyond the annotations (readOnlyHint=false, destructiveHint=false). It also adds a consent requirement, making the external effect and its preconditions transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler; the first identifies the action and scope, and the second adds the critical behavioral guardrail. Every sentence earns its place and the most important operational warning is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter send operation, the description covers the required side effect, the explicit user confirmation prerequisite, and enough parameter meaning to invoke correctly. It does not describe the return value or error conditions, but the tool's simplicity and sibling context make this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It maps chat_id to 'recipient chat' and text to 'exact message', which provides some semantic grounding. However, it does not explain how to determine chat_id, mention text length constraints, or clarify expected formats beyond what the parameter names already imply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Send text') and a specific resource ('personal Telegram account'), which clearly distinguishes it from siblings like telegram_send_file and telegram_reply_message. The verb+resource structure leaves no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit precondition: call only after the user has confirmed both the recipient chat and the exact message. It does not explicitly name alternative tools or when-to-prefer them, but the confirmation condition gives clear operational guidance.

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.

  1. 20 tool updatesv0.2.0
    • First observedtelegram_click_inline_button
    • First observedtelegram_delete_own_message
    • First observedtelegram_download_file
    • First observedtelegram_edit_own_message
    • First observedtelegram_get_chat
    • First observedtelegram_get_inline_buttons
    • First observedtelegram_get_me
    • First observedtelegram_get_messages
    • First observedtelegram_get_pinned_message
    • First observedtelegram_get_unread
    • First observedtelegram_health
    • First observedtelegram_list_chats
    • First observedtelegram_react_to_message
    • First observedtelegram_reply_message
    • First observedtelegram_resolve_chat
    • First observedtelegram_search_chats
    • First observedtelegram_search_media
    • First observedtelegram_search_messages
    • First observedtelegram_send_file
    • First observedtelegram_send_message

TDQS

A3.8/5.0

Scored across 20 tools

Disambiguation3/5

Most tools target distinct actions, but several discovery tools overlap: telegram_search_chats and telegram_resolve_chat both find chats by name and return candidate IDs, and telegram_list_chats vs telegram_get_unread both list recent chats. Descriptions are clear enough for an attentive agent, but boundary confusion is likely.

Naming Consistency4/5

All tools share a telegram_ prefix and nearly all follow verb_noun naming like list_chats, send_message, and download_file. Minor deviations such as telegram_health, telegram_get_me, and telegram_get_unread break the pattern slightly but do not create serious confusion.

Tool Count3/5

Twenty tools is on the heavy side, especially with several discovery tools that could plausibly be merged without losing capability. Each tool does represent a legitimate Telegram operation, so the count is defensible but feels somewhat bloated.

Completeness4/5

The server covers chat discovery, reading and searching messages, sending/reply, editing/deleting own messages, reactions, inline buttons, and media download. Missing capabilities like marking chats read, forwarding messages, or sending non-file media are minor gaps for a personal-assistant workflow and can be worked around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that connects AI assistants to your real Telegram account via User API (MTProto). Features default-deny ACL with per-chat permissions, message search, file sending, forwarding, media downloads, and rate limiting.
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Drives a personal Telegram account from the terminal or via MCP, enabling AI assistants to list chats, send/edit messages, fetch history, manage groups, and more with tiered read/write/destructive permissions.
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables use of a personal Telegram account within MCP clients for reading and sending messages, searching chats, and managing media, all running locally.
    16
    9 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A safe-by-default MCP server for real Telegram accounts powered by TDLib, enabling AI agents to read and act on your account with read-only mode and human approval for destructive actions.
    8
    Apache 2.0