Skip to main content
Glama
LoneVertex

Telegram MCP — Next Generation

Telegram MCP — 次世代

MCP互換クライアント向けの実運用指向Telegram連携です。LoneVertex がメンテナンスし、Telethon と Model Context Protocol 上に構築されています。このリポジトリは上流のTelegram機能を維持しつつ、明示的なツール層、フェイルクローズの変更制御、キー付き並行性制限、上限付きリトライ、ローカルSQLite/FTS5キャッシュ、より安全なメディアパス、パッケージエントリポイント、再現可能なCIを追加しています。

デフォルトの基本方針: ローカル stdio、core ツール層、Telegram への書き込みなし、破壊的操作なし、検証されていない filesystem roots なし。

プロジェクト運営: Contributing · Security Policy · Apache License 2.0

含まれるもの

この実装は 128個のツール を登録します。アカウント、チャット、コンタクト、メッセージ、グループ、メディア、プロフィール、フォルダ、受信イベントをカバーする上流の125ツールに加え、cache_health、search_cached_messages、sync_chat_cache を含みます。上流の出自はコミット 52cca204d945e4ec292801a9d972334c0c2a4b63 に保持され、次世代パッケージのバージョンは 4.0.1 です。

Tier

Purpose

Default

core

アカウント、チャット、メッセージ、検索、プロフィール、メディア検査、コンタクト、フォルダ、管理検査、ローカルキャッシュの読み取り専用ツール

はい

standard

コアに加え、一般的なメッセージ/メディア送信、返信、転送、リアクション、下書き、エイリアス、イベント待機

いいえ

full

管理操作や破壊的操作を含む、すべての上流ツール

いいえ

TELEGRAM_MCP_TIER を設定して層を選択します。層の選択により登録されるツールが決まります。TELEGRAM_SEND_ENABLED は書き込み操作を実行できるかどうかを独立して制御し、TELEGRAM_DESTRUCTIVE_ENABLED は破壊的/管理操作のための第二のゲートです。サーバーは、いずれかのゲートが呼び出しをブロックすると、構造化された nothing_sent または nothing_done レスポンスを返します。

Related MCP server: Telegram MCP

クイックスタート

Python 3.11 または 3.12 を使用してください。my.telegram.org/apps から Telegram API の資格情報を取得し、同梱のセッション生成ツールを使って MCP プロセス外で承認済みセッションを生成してください。

git clone https://github.com/LoneVertex/telegram-mcp-nextgen.git
cd telegram-mcp-nextgen
python -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# edit .env with TELEGRAM_API_ID, TELEGRAM_API_HASH, and an authorized session
telegram-mcp

パッケージ開発とリリース検証のため:

pip install -e '.[dev]'
pytest -q
ruff check telegram_mcp/config.py telegram_mcp/core telegram_mcp/db telegram_mcp/models
mypy --explicit-package-bases telegram_mcp/config.py telegram_mcp/core telegram_mcp/db telegram_mcp/models
python -m build

サーバーは意図的に非対話式です。起動前に telegram-mcp-generate-session を使用し、生成されたセッション文字列を秘密に保ってください。.env、Telethon の .session ファイル、API ハッシュ、セッション文字列をコミットしないでください。

設定

シークレットなしの完全なテンプレートは .env.example にあります。主な設定を以下にまとめます。

変数

安全なデフォルト値

説明

TELEGRAM_MCP_TIER

core

登録されるツール層: core、standard、full

TELEGRAM_SEND_ENABLED

false

書き込み操作のグローバルゲート

TELEGRAM_DESTRUCTIVE_ENABLED

false

削除、Ban、退出などの操作に対する追加ゲート

TELEGRAM_DATA_DIR

~/.local/state/telegram-mcp

永続状態のルート

TELEGRAM_DB_PATH

導出

SQLite キャッシュパス。TELEGRAM_DATA_DIR の下に置く必要があります

TELEGRAM_FLOOD_MAX_RETRIES

4

FloodWait/一時障害の上限付きリトライ試行回数

TELEGRAM_FLOOD_MAX_SECONDS

3600

プロバイダーが要求する待機時間として受け入れる上限

TELEGRAM_RATE_CAPACITY

8

アカウントごとのトークンバケットのバースト容量

TELEGRAM_RATE_REFILL_PER_SECOND

2.0

アカウントごとのトークン補充率

MAX_MEDIA_DOWNLOAD_SIZE_MB

200

ダウンロードするメディアの最大サイズ

MAX_MEDIA_UPLOAD_SIZE_MB

200

アップロードするメディアの最大サイズ

設定の構築は副作用を伴いません。資格情報と認可の確認は、ローカルツールがパッケージをインポートするときではなく、ライブクライアントが起動するときに行われます。キャッシュやセッション操作が必要とする場合、ランタイム状態は所有者のみがアクセスできるディレクトリ配下に作成されます。

MCP クライアントとトランスポート

デスクトップ MCP クライアント向けのシークレットなしの例は config/mcp-configs.md を参照してください。ローカル stdio を推奨します。長期間実行されるローカルサービス向けには Streamable HTTP も利用できます。

MCP_TRANSPORT=http
MCP_HOST=127.0.0.1
MCP_PORT=8765

認証のない HTTP エンドポイントをパブリックインターネットに直接公開しないでください。リバースプロキシを使う場合は、認証、TLS、許可ホスト、許可オリジン、ネットワーク制御を設定してください。MCP_ALLOWED_HOSTS を設定している場合、サーバーは MCP DNS リバインディング保護を維持します。

並行性と信頼性

各アカウントは、キー付き async mutex とトークンバケットによって保護されます。同一アカウントを共有する呼び出しは、アダプター境界で直列化されます。一方で、異なるアカウントラベルにわたる読み取り専用のマルチアカウントファンアウトは可能です。FloodWait と一時的な接続障害は、指数バックオフとジッターを備えた上限付きの単一のリトライポリシーを使用します。セッションレベルのアドバイザリロックは維持され、同じ Telegram 認証キーを複数のプロセスが同時に使用するのを防ぎます。

ローカルキャッシュは、SQLite の WAL モード、外部キー、短時間の接続、明示的なトランザクション、チャット/日付/送信者/トピックのインデックス、検索用の FTS5 を使用します。同期処理はチェックポイントを保存し、upsert を使用するため、編集内容は重複せずに反映されます。SQLite の処理、ディレクトリ作成、整合性チェックは、イベントループをブロックせずにワーカースレッドで実行されます。

メディアとファイルシステムの安全性

ファイルツールは、クライアントの MCP Roots または明示的なサーバー側ルートを必要とします。空または検証できないルートは、TELEGRAM_ALLOW_SERVER_ROOTS_FALLBACK=true を意図的に有効にしない限り、すべて拒否する動作になります。パスは設定されたルート配下で解決され、侵入トラバーサルと NUL バイトは拒否され、シンボリックリンクによる境界外参照を拒否され、メディアサイズ制限が適用され、生成されたファイルは所有者のみのパーミッションを使用します。新しいセキュリティプリミティブは、チャンク読み取りとアトミックな出力置き換えをサポートしています。

Telegram のテキスト、キャプション、名前、ボタンラベル、メディアメタデータ、受信イベントフィールドは、信頼できないユーザーコンテンツです。サニタイズ処理とオーディエンス注釈は上流から引き継がれており、これらのフィールドを命令として扱ってはいけません。

Docker

イメージは 2 ステージの Python 3.12 ビルドを使用し、UID 10001 として実行し、状態を /var/lib/telegram-mcp に保持し、認証情報を実行時のみ受け取ります。

cp .env.example .env
# edit .env
podman compose up --build
# or: docker compose up --build

Compose は HTTP を 127.0.0.1:8765 にバインドし、永続的な名前付きボリュームを使用し、Linux ケイパーティを破棄し、no-new-privileges を有効にし、読み取り専用のルートファイルシステムをマウントし、制約付きの /tmp を提供します。コンテナビルドは Docker が利用できなかったため、今回の納品に使用したプロセス内では実行されていません。Docker をサポートするランナーで行われる CI ワークフローで検証されます。

開発とリリースのゲート

.github/workflows/ci.yml の集約ワークフローは、Python 3.11 と 3.12 で実行され、継承した回帰手順テストに加えて次世代のテストを実行し、新しいプロダクション層に対して厳格な Ruff チェックを実行し、明示的なパッケージベースの mypy チェックを実行し、パッケージをコンパイルし、wheel/sdist をビルドし、宣言された依存関係を監査し、Docker イメージと Compose 設定を検証します。上流のライブ Telegram アダプターは、継承したモック化回帰テストスイートで引き続きカバーされます。ローカルの信頼性/セキュリティモジュールには専用のテストとカバレッジがあります。

所有権、互換性、来歴

プロジェクトメンテナンス: LoneVertex。

ルートの main.py、上流ツールのモジュール名、セッション生成ツール、アカウントラベル、プロキシ設定、MCP トランスポート変数、従来の公開フィルター、上流の Apache-2.0 ライセンスは、互換性のために保持されています。新しいパッケージのエントリポイントは telegram_mcp.runner:main で、python -m telegram_mcp もサポートされています。上流のソースと帰属は Git 履歴と AUDIT_REPORT.md に表示されます。

トラブルシューティング

起動時にセッションが設定されていないと表示された場合は、承認済みセッションを生成し、TELEGRAM_SESSION_STRING または有効なファイルセッション名を設定してください。書き込みが MutationDisabled を返した場合は、TELEGRAM_SEND_ENABLED=true を設定して再起動してください。削除または管理操作の場合は TELEGRAM_DESTRUCTIVE_ENABLED=true も設定してください。ファイルツールがルートを利用できないと報告する場合は、クライアントの MCP Roots を設定するか、サーバー側で許可されたルートを引数の位置に指定してください。FloodWait が設定済みの最大値を超えた場合、無限に待機されるのではなく、呼び出しは意図的に返されます。cache_health を使うと、Telegram に接続せずにローカル SQLite/FTS5 の整合性を検査できます。

参照

ライセンス

アパッチ人は、Apache License 2.0 です。 LICENSE を参照してください。

Available Tools

22 tools
check_cache_healthInspect Local SQLite Cache HealthA
Read-onlyIdempotent

Inspect local SQLite/FTS5 archive integrity, database size, and active tool tier diagnostics. Use to verify cache readiness before running local searches. Operates entirely offline without Telegram API calls.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already include readOnlyHint: true, idempotentHint: true, and destructiveHint: false, which establish the tool as a safe read-only operation. The description adds valuable context beyond annotations by specifying the offline nature ('without Telegram API calls') and the specific diagnostics it returns (integrity, size, tier). This extra context helps the agent understand the operational scope and side-effect-free 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 concise, two sentences, and front-loads the key purpose and the use case. Every word adds value: the first sentence lists specific diagnostics, the second gives the usage trigger and a key behavioral trait (offline). No wasted words or redundancy.

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 tool with zero parameters and a rich output schema (which likely details the return values), the description is complete. It covers the purpose, usage context, and key behavioral trait (offline). The annotations cover safety, and the output schema handles the return format. Nothing important is missing for an agent to decide whether and how to invoke it.

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?

There are zero parameters, and the schema coverage is 100% (trivially, as there are no parameters). The description doesn't need to document parameters. Since there are none, the baseline is 3, and the description adds no parameter-specific information because there is nothing to add. This is appropriate.

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

Purpose4/5

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

The description clearly states that the tool inspects local SQLite/FTS5 archive integrity, database size, and active tool tier diagnostics. It distinguishes itself from sibling tools by focusing on cache health rather than chat operations or search. The purpose is specific and actionable, though it doesn't explicitly name a sibling alternative.

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 states when to use this tool: 'Use to verify cache readiness before running local searches.' This provides clear guidance on the trigger condition, and the mention of 'Operates entirely offline without Telegram API calls' implies it is a safe, low-cost operation compared to API calls. However, it doesn't explicitly say when not to use it or name alternatives, which is a minor gap.

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

delete_messageDelete Single Message from ChatA
DestructiveIdempotent

Delete a single message from a chat by message ID. Destructive operation requiring TELEGRAM_SEND_ENABLED=true and TELEGRAM_DESTRUCTIVE_ENABLED=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.
message_idYesUnique integer ID of the target message within the specified chat.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true. The description adds value by naming the exact environment prerequisites (TELEGRAM_SEND_ENABLED=true and TELEGRAM_DESTRUCTIVE_ENABLED=true), giving operational authorization context that is not present in the annotations. It does not contradict the 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 fluff: the first states the primary action and mechanism, the second provides critical safety prerequisites. The main purpose is front-loaded, and every word 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?

With an output schema present and a rich input schema covering all parameters, the description provides the essential missing context: destructive operation and environment-flag requirements. It does not explain post-deletion behavior or error cases, but the idempotentHint annotation and the output schema mitigate that need. Minor gap, but otherwise complete for the tool's complexity.

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 detailed descriptions for chat_id and message_id already present. The description only repeats 'by message ID,' which is already in the schema, so it adds no new parameter-level meaning beyond the baseline set by 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 opens with a specific verb and resource: 'Delete a single message from a chat by message ID.' It unambiguously distinguishes this tool from editing, pinning, or sending messages among the sibling tools, and the deletion scope (single message) is explicit.

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 operational context by stating the destructive nature and the two required environment flags, which tells an agent when its use is permitted. It does not explicitly name alternative tools or conditions where another sibling would be more appropriate, but no direct deletion sibling exists, so the context is sufficient.

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

download_mediaDownload Media Attachment to Local DiskA
Idempotent

Download an attachment or media file from a message to the local filesystem. Destination path must resolve within configured MCP allowed roots. To check metadata before downloading, use get_media_info.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.
file_pathNoLocal filesystem path to the file to upload or send. Must resolve within configured MCP allowed roots.
message_idYesUnique integer ID of the target message within the specified chat.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already expose mutability (readOnlyHint=false), idempotency, and non-destructive behavior. The description adds the operational constraint that the destination path must be within configured MCP allowed roots, which is useful beyond the 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?

Three short sentences, front-loaded with the core purpose, followed by the key constraint and the alternative tool. No filler or repetition.

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 download operation, the description explains what it does, the key path constraint, and the metadata alternative; an output schema exists, so return-value details are not necessary. Minor ambiguity about the default destination when file_path is omitted prevents a 5.

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 100%, so the baseline is 3. The description adds the 'destination path' framing, but it largely restates file_path's root constraint and does not clarify the file_path schema phrase about 'upload or send' or the behavior when file_path is omitted.

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 first sentence names a specific operation ('Download an attachment or media file'), the resource (message attachment), and the destination (local filesystem). It clearly distinguishes itself from siblings like get_media_info (metadata only) and send_file (upload).

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: use it to physically fetch media, and use get_media_info when only metadata is needed. It lacks an explicit exclusion for send_file or a fuller when-not-to-use statement, but the main alternative is named.

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

edit_messageEdit Text of Sent Telegram MessageA
Idempotent

Edit the text content of an existing message previously sent by this account. Mutation operation requiring TELEGRAM_SEND_ENABLED=true. Cannot edit messages sent by other users.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.
new_textYesNew replacement text content when editing an existing sent message.
message_idYesUnique integer ID of the target message within the specified chat.
parse_modeNoText formatting parser: 'markdown' (default), 'html', or 'none'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate a non-read-only, non-destructive, idempotent operation. The description adds valuable behavioral context beyond annotations: it identifies the operation as a mutation and discloses the configuration prerequisite (TELEGRAM_SEND_ENABLED=true) plus the ownership restriction. 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 dense sentences with no filler. The main action and target are front-loaded, followed immediately by the critical mutation and permission constraints. 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 mutation tool with 5 parameters, an output schema, and all parameters fully documented, the description covers the essential operational constraints: mutation status, environment flag, and message ownership. It is complete enough for an agent to select and invoke the tool 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?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description complements this with the ownership constraint but does not add substantial semantic detail beyond what the schema provides. Baseline 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 ('Edit'), a precise resource ('text content of an existing message'), and a key scope constraint ('previously sent by this account'). This immediately differentiates the tool from siblings like send_message, reply_to_message, and delete_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 clear context for when this tool applies: editing an existing message sent by this account, and explicitly rules out editing messages sent by other users. It does not name sibling alternatives, but the scope and the TELEGRAM_SEND_ENABLED prerequisite provide adequate usage guidance.

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

get_chatGet Chat Details and MetadataA
Read-onlyIdempotent

Retrieve core metadata, title, member count, and type for a specific chat or channel. Use when inspecting a known chat ID or @username.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the read-only nature is covered. The description adds no side-effect, auth, rate-limit, or error behavior beyond restating that metadata is retrieved; the listed return fields are redundant with the existing output schema.

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, zero filler; the primary purpose is front-loaded, and the usage condition is appended in the same breath.

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 simple read-only lookup with two params, a full schema, an output schema, and safety annotations, the description plus structured data is complete. An agent knows exactly when to call it and what it returns.

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%, so the baseline applies. The description's mention of 'chat ID or @username' merely echoes (and slightly under-specifies) the chat_id property description, and it adds nothing about the account parameter.

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 ('Retrieve') and resource ('core metadata, title, member count, and type for a specific chat or channel'). It distinguishes the tool from list-oriented siblings by limiting to a specific known chat, and the usage clause ('known chat ID or @username') disambiguates further.

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 clear context ('Use when inspecting a known chat ID or @username'), which indicates the intended condition for use. It does not name alternatives (e.g., list_chats for discovery, resolve_username for resolution) or offer explicit when-not-to-use guidance, so it falls short of a 5.

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

get_meGet Current Account Profile and IdentityA
Read-onlyIdempotent

Retrieve detailed profile identity of the current Telegram user account (ID, name, username, phone). Use when verifying account identity, session details, or caller permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover read-only, non-destructive, and idempotent behavior. The description adds value by specifying the exact identity fields returned and mentioning account/session verification use cases. No contradictions with annotations exist.

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 tightly written sentences: the first states what the tool returns, the second states when to use it. No filler or redundancy; key distinctions are front-loaded.

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?

This is a simple, low-risk read-only tool with no required parameters, a rich annotation set, and an output schema. The description fully covers what an agent needs to know to call it correctly and appropriately.

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 100%, so the optional 'account' parameter is fully documented by the schema. The description does not add parameter-level detail, but the baseline 3 is appropriate because the schema carries the full burden.

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 ('Retrieve') and a precise resource ('detailed profile identity of the current Telegram user account') and lists the concrete fields returned (ID, name, username, phone). This clearly distinguishes it from sibling tools like resolve_username or list_contacts, which operate on other accounts or entities.

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 a clear context for use: 'verifying account identity, session details, or caller permissions.' There are no explicit exclusions or alternative tool references, but because the tool is unique among siblings, the context provided is sufficient for an agent to select it.

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

get_media_infoInspect Media Metadata in MessageA
Read-onlyIdempotent

Inspect media metadata (file size, dimensions, mime type, duration) attached to a specific message. Use before downloading or viewing to verify file attributes and dimensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.
message_idYesUnique integer ID of the target message within the specified chat.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which fully cover the safety profile. The description adds no additional behavioral traits beyond the purpose, such as side effects or return semantics, but it also does not contradict the 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 crisp sentences. The first states the action and scope, the second gives usage guidance. No filler or redundancy, and the core purpose is front-loaded.

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?

The tool has a rich output schema, complete parameter descriptions, and strong annotations covering read-only/idempotent behavior. The description provides the remaining context needed to decide when to call it, making the overall definition complete for an AI agent.

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 100%, so the schema already documents all parameters (account, chat_id, message_id) in detail. The description mentions 'attached to a specific message' but does not add parameter-level information beyond what the schema provides, which lands exactly at the baseline.

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 verb ('Inspect') and resource ('media metadata attached to a specific message'), and enumerates the exact attributes (file size, dimensions, mime type, duration). This clearly distinguishes it from download_media and get_messages, which handle fetching or listing rather than metadata inspection.

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 instructs to use the tool 'before downloading or viewing' to verify file attributes and dimensions. This gives clear context for when to invoke it, though it does not explicitly name download_media as the alternative for the actual file transfer.

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

get_messagesGet Paginated Messages from ChatA
Read-onlyIdempotent

Retrieve paginated messages from a specific chat starting from an offset or limit. Use for sequential message retrieval. To search text across messages, use search_messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-indexed page number for paginated result sets.
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.
page_sizeNoMaximum number of items to return per page (typically 10 to 50).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description's job is lighter. It adds pagination behavior context ('paginated', 'sequential message retrieval'). Minor imprecision: it says 'offset or limit' while the schema actually uses page/page_size, which is a slight terminology mismatch but not a contradiction.

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 short sentences with zero waste: the action, the usage context, and the sibling alternative. The most decision-relevant information (what it does and when to use it) is front-loaded before the alternative routing.

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 an output schema present, rich annotations, and 100% schema param coverage, the description covers what remains: pagination intent and differentiation from search_messages. The only gap is the 'offset or limit' phrasing that doesn't match the page/page_size schema, which could mildly confuse an agent selecting pagination parameters.

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 100%, so the schema fully documents all four parameters (page, page_size, account, chat_id). The description adds no real parameter semantics beyond the schema — 'offset or limit' loosely maps to page/page_size but is arguably a slightly less accurate framing. Baseline 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?

States a specific verb and resource ('Retrieve paginated messages from a specific chat') and clearly differentiates from search_messages by naming it explicitly. The title reinforces the same purpose. An agent can immediately tell this tool fetches messages sequentially rather than searching them.

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?

Gives explicit when-to-use guidance ('Use for sequential message retrieval') and names the alternative tool with the condition that selects it ('To search text across messages, use search_messages'). Nothing about selection is left to inference.

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

list_chatsList All Telegram Chats and ChannelsA
Read-onlyIdempotent

List all accessible chats, groups, channels, and direct dialogs with pagination support. Use when locating specific conversations by title or type.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items or records to retrieve (integer between 1 and 100).
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
archivedNoIf true, queries archived chats instead of main inbox chats.
chat_typeNoFilter chats by type: 'all', 'private', 'group', 'channel', or 'bot'.
with_aboutNoIf true, includes the about/bio description in the retrieved chat details.
unread_onlyNoIf true, filters and returns only chats with unread messages.
unmuted_onlyNoIf true, filters and returns only chats whose notifications are active.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotations: it specifies 'accessible chats' (scope) and 'pagination support,' which are not covered by readOnlyHint or idempotentHint. It does not contradict any annotations. While it could mention rate limits or pagination mechanics, the read-only and idempotent nature is already disclosed, so this is sufficient.

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 with no redundancy. The first sentence front-loads the primary function (listing all accessible chats) and the second provides a usage hint. Every word earns its place, making it highly efficient and well-structured.

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 tool has 7 optional parameters, all documented in the schema, and an output schema exists. The description mentions pagination and gives a usage context, which is enough for an agent to decide when to call it. It does not explain how to use pagination parameters, but they are fully documented in the schema, so the description is adequately complete for its purpose.

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 input schema provides complete descriptions for all 7 parameters with 100% coverage, including limit, account, archived, chat_type, with_about, unread_only, and unmuted_only. The description does not add any additional semantic meaning beyond the schema, so the baseline score 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 clearly states 'List all accessible chats, groups, channels, and direct dialogs' with pagination support, defining a specific verb and resource. It distinguishes itself from single-chat fetch tools like get_chat by emphasizing 'all' and includes a usage hint about locating conversations by title or type, making its purpose 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 provides a clear usage context: 'Use when locating specific conversations by title or type.' This implies a use case but does not explicitly mention alternative tools such as search_messages or search_public_chats, nor does it state when not to use it. The guidance is present but could be more explicit about exclusions.

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

list_contactsList Telegram Account ContactsA
Read-onlyIdempotent

List all registered Telegram contacts in your account address book with IDs and phone numbers. Use when finding contacts to message. To search contacts by query, use search_contacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds the scope of what is returned ('with IDs and phone numbers'), but since an output schema exists this is largely redundant and no auth or rate-limit context is added. A 3 reflects annotations doing the heavy lifting with modest added value.

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 waste; the purpose is front-loaded and the routing hint follows immediately. Every clause 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?

With an output schema handling return values, rich annotations covering the safety profile, and 100% schema coverage of the sole parameter, the description supplies everything an agent needs to select and invoke this tool 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?

Schema description coverage is 100% and the single 'account' parameter is fully documented in the schema, so the baseline is 3. The description does not mention the account parameter or its multi-account fan-out behavior, adding nothing 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 verb (list) and resource (Telegram contacts in the account address book) and explicitly distinguishes itself from search_contacts. An agent can tell the two apart without opening either schema.

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?

Gives an explicit when-to-use ('finding contacts to message') and names the alternative plus its triggering condition ('to search contacts by query, use search_contacts'). Nothing is left to inference.

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

mark_as_readMark Messages in Chat as ReadA
Idempotent

Mark all messages or messages up to a specific ID in a chat as read. Mutation operation requiring TELEGRAM_SEND_ENABLED=true. Clears unread badge counter.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context beyond those hints: the environment prerequisite, the badge-clearing side effect, and the all-or-up-to-ID scope. No contradiction with the annotations was found.

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 short sentences with no filler. The core operation is front-loaded, and each sentence adds a distinct piece of information: scope, mutation requirement, and side effect.

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 low-complexity mutation with rich annotations and an output schema, the description is mostly complete: it covers scope, prerequisites, and effect. The main gap is that 'up to a specific ID' is not representable through the current parameters, which leaves a small but real ambiguity.

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 already documents both parameters thoroughly, so the baseline is 3. The description's phrase 'up to a specific ID' adds semantic interest, but it is ambiguous because the input schema exposes no message_id parameter; an agent may not know how to express that threshold with the declared inputs.

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 the exact operation ('Mark...as read'), the resource ('messages in a chat'), and the scope ('all messages or messages up to a specific ID'). It is clearly distinct from the sibling tools, which handle sending, editing, deleting, pinning, or searching rather than changing read state.

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: it is a mutation, requires TELEGRAM_SEND_ENABLED=true, and clears the unread badge counter. It does not explicitly mention when not to use it or name an alternative, but no sibling tool directly competes with mark-as-read functionality.

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

pin_messagePin Message to Top of ChatA
Idempotent

Pin a message to the top of a chat or supergroup for high visibility. Mutation operation requiring TELEGRAM_SEND_ENABLED=true and admin permissions in supergroups/channels. To unpin, use unpin_message.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.
message_idYesUnique integer ID of the target message within the specified chat.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With annotations already indicating readOnlyHint=false and idempotentHint=true, the description adds valuable operational context: it is a mutation, requires a specific environment flag, and needs admin permissions in certain contexts. It does not mention error behavior or pin limits, but that is not a required disclosure given the existing 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?

Three short, focused sentences with no filler. The action is front-loaded, the mutation and prerequisites come second, and the unpin alternative is provided last. 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?

Given the output schema exists and the annotations cover safety/idempotency, the description supplies the remaining essentials: purpose, prerequisites, and the undo path. An agent can decide whether to call the tool and how to avoid common permission and configuration failures.

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 100%, so the parameters are already fully documented in the schema. The description adds minimal parameter-level meaning beyond confirming the chat/supergroup context, which matches the baseline for high schema 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 states a specific action ('Pin a message to the top'), identifies the target resource ('chat or supergroup'), and explains the intent ('for high visibility'). It is clearly distinct from siblings like unpin_message, delete_message, and 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 Guidelines5/5

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

The description explicitly names the operation type as a mutation and gives concrete preconditions: TELEGRAM_SEND_ENABLED=true and admin permissions in supergroups/channels. It also directs the agent to unpin_message when the goal is to remove a pin, which is explicit alternative guidance.

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

reply_to_messageReply Directly to Existing MessageA

Send a message in direct reply to a specific message ID in a chat. Mutation operation requiring TELEGRAM_SEND_ENABLED=true. To send a standalone message, use send_message.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesBody text of the message, comment, or search query string.
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.
message_idYesUnique integer ID of the target message within the specified chat.
parse_modeNoText formatting parser: 'markdown' (default), 'html', or 'none'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate a non-read-only, non-destructive, non-idempotent operation. The description adds the important environment requirement TELEGRAM_SEND_ENABLED=true. It does not detail side effects like reply thread placement, but the annotation coverage lowers the burden and no contradiction 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 sentences contain the core action, the operational prerequisite, and the key alternative tool. Every sentence earns its place and the most important information 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 mutation tool with five schema-documented parameters and an output schema, the description covers purpose, the config gate, and the primary alternative. It could be slightly richer about side effects of replying, but nothing essential for calling it correctly is missing.

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 100%, with chat_id, message_id, text, account, and parse_mode each documented. The description adds no new parameter-level detail, but the schema carries the meaning, so a baseline score 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 opens with a specific verb and resource: 'Send a message in direct reply to a specific message ID in a chat.' It also names the sibling alternative send_message for standalone messages, so agents can distinguish it immediately without comparing schemas.

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 states when this tool is appropriate (direct reply to a specific message ID) and when it is not ('To send a standalone message, use send_message'). It also adds the TELEGRAM_SEND_ENABLED=true prerequisite, giving clear selection and operational guidance.

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

resolve_usernameResolve Telegram Username to Entity IDA
Read-onlyIdempotent

Resolve a public @username to its underlying Telegram entity ID and object type (User, Channel, Group). Use before calling ID-based tools when only a username handle is known.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
usernameYesTelegram username handle (without the leading '@' symbol).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds that the tool returns entity ID and object type but does not add behavioral details such as failure modes or account-fanout behavior. This is acceptable given the strong annotation coverage.

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, front-loaded with the core action and outcome, followed by a direct usage hint. Every sentence earns its place with no redundancy.

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?

With a complete input schema, an output schema, and annotations covering read-only/idempotent behavior, the description fully covers what an agent needs to invoke this tool correctly. The usage hint ties it to the broader toolset without needing to enumerate return fields.

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 100%, so the schema already documents both parameters clearly, including the '@' formatting note for username and the multi-account behavior for account. The description does not add parameter meaning beyond the schema, so baseline 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 names a specific action ('Resolve'), a specific resource ('public @username'), and a concrete outcome ('underlying Telegram entity ID and object type'). It also enumerates the possible object types, which clearly distinguishes it from list/search tools among its siblings.

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 explicitly states when to use the tool: 'Use before calling ID-based tools when only a username handle is known.' This is clear contextual guidance. It does not explicitly name alternatives or when not to use it, so it falls just short of a 5.

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

search_cached_messagesSearch Local Offline SQLite Message ArchiveA
Read-onlyIdempotent

Search the local FTS5 SQLite archive for messages without making live Telegram API requests. Use for instantaneous, rate-limit-free search over synchronized messages. To sync messages into cache first, use sync_chat_cache.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items or records to retrieve (integer between 1 and 100).
queryYesSearch text string or keywords to match against messages, contacts, or entities.
offsetNoPagination offset indicating the number of initial records to skip.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuine behavioral context the annotations do not: no live API calls, no rate limits, and the dependency on previously synchronized messages. It doesn't mention staleness or what happens for unsynced chats, keeping it at 4.

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 short sentences, front-loaded with the core mechanism, then the benefit, then the prerequisite tool. Every sentence carries distinct information and nothing is repeated from the schema or annotations.

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?

An output schema exists, so return values need no explanation, and the description covers the key non-obvious dependency (sync first) and the offline/rate-limit behavior. It could go further on cache staleness or coverage limits, but for a 4-param read tool it is largely 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 100%, with limit, offset, query, and chat_id all documented in the schema itself, so the baseline is 3. The description adds no extra meaning about query syntax (FTS5 matching rules) or pagination behavior beyond what the schema already says.

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 verb (Search) plus the exact resource and mechanism (local FTS5 SQLite archive), and contrasts it with live Telegram API requests, which separates it from siblings like search_messages and search_global. An agent can tell which search tool to reach for without opening a schema.

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?

Gives a clear use condition (instantaneous, rate-limit-free search over synchronized messages) and names a concrete prerequisite alternative, `sync_chat_cache`, for populating the cache. It does not explicitly state when NOT to use it (e.g., fall back to live search_messages when the cache lacks a chat), so it stops short of full routing guidance.

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

search_contactsSearch Telegram Contact DirectoryA
Read-onlyIdempotent

Search your Telegram contacts directory by name, phone number, or username. Use when looking up a specific person. To view the entire directory, use list_contacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch text string or keywords to match against messages, contacts, or entities.
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds scoping context (directory search by name/phone/username) but does not disclose the multi-account fan-out behavior that the account parameter implies. Adequate given annotation coverage, but not rich.

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: purpose plus matchable fields front-loaded, then the use-when and the sibling alternative. No filler, no 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?

Complete enough for a read-only directory search: an output schema exists so return values need not be described, and annotations cover the safety profile. The only gap is that the multi-account behavior (fan-out vs. default) lives solely in the schema description rather than being reinforced here, but nothing an agent needs to call correctly is missing.

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 100%, so both parameters are already documented in the schema, including the multi-account fan-out semantics. The description repeats the matchable fields (name, phone number, username) which loosely maps to the query parameter but adds no syntax or format detail beyond the schema. Baseline 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?

States a specific verb (search) and resource (Telegram contacts directory), and enumerates matching fields (name, phone number, username). It also explicitly distinguishes from the sibling list_contacts, so the agent can pick correctly without opening either schema.

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?

Explicitly says when to use it ('looking up a specific person') and names the alternative (list_contacts) plus its selection condition ('to view the entire directory'). Routing is unambiguous.

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

search_messagesSearch Messages Within Specific ChatA
Read-onlyIdempotent

Search for text keywords within a specific Telegram chat or supergroup. Use when finding past conversations in a single chat. To search the offline cache without live Telegram API calls, use search_cached_messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items or records to retrieve (integer between 1 and 100).
queryYesSearch text string or keywords to match against messages, contacts, or entities.
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the context that this performs live Telegram API calls versus cached search, but does not disclose rate limits, auth requirements, or pagination behavior beyond what schema/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 efficient sentences with no wasted words. The core purpose is front-loaded, and the alternative tool is named clearly in the second sentence.

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?

Given rich annotations, a full output schema, and complete schema descriptions for all parameters, the description covers everything needed to select and invoke the tool correctly. It clarifies scope, live API behavior, and the cached alternative.

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 100%, so the schema fully documents chat_id, query, limit, and account. The description aligns with the query and chat_id semantics but does not add meaning beyond the schema, 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, resource, and scope: 'Search for text keywords within a specific Telegram chat or supergroup.' It is clearly distinguishable from sibling search tools (search_cached_messages, search_contacts, search_public_chats) because it specifies the single-chat scope.

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?

Explicitly says 'Use when finding past conversations in a single chat' and names the alternative: 'To search the offline cache without live Telegram API calls, use search_cached_messages.' This gives the agent clear routing guidance and an exclusion condition.

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

search_public_chatsSearch Public Channels and Groups GloballyA
Read-onlyIdempotent

Search Telegram globally for public channels, supergroups, and bots matching query terms. Use when discovering new public communities. To search within your existing chats, use list_chats or search_messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items or records to retrieve (integer between 1 and 100).
queryYesSearch text string or keywords to match against messages, contacts, or entities.
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety and idempotency profile is fully covered. The description adds the global-scope trait but says nothing about result volume, rate limits, or ordering beyond what structured fields provide. Adequate but not rich.

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 short sentences, front-loaded with purpose then routing guidance. No filler 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?

An output schema exists, so return values need not be explained, and annotations carry the safety profile. The description covers scope, purpose, and alternatives, leaving only minor gaps (e.g., pagination/limit guidance) relevant to 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?

Schema description coverage is 100%, so the schema already documents query, limit, and account; baseline is 3. The description refines what the query targets (public communities rather than the generic "messages, contacts, or entities" in the schema), a marginal but real addition.

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 verb (Search) plus the resources searched (public channels, supergroups, bots) and the scope (globally / Telegram-wide). It is immediately distinguishable from in-account search siblings. No schema opening required to understand the purpose.

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?

Gives explicit when-to-use ("when discovering new public communities") and names the alternatives with the condition that selects them ("search within your existing chats, use list_chats or search_messages"). The global-vs-local routing decision is fully specified.

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

send_fileUpload and Send Document or FileA

Upload and send a local document or file to a chat. File path must resolve within configured MCP allowed roots. Requires TELEGRAM_SEND_ENABLED=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
captionNoOptional caption text describing the media file (Markdown or plain text).
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.
topic_idNoForum topic identifier (thread ID) in a supergroup where forum topics are enabled.
file_pathYesLocal filesystem path to the file to upload or send. Must resolve within configured MCP allowed roots.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already mark this as a non-read, non-idempotent mutation, so no restatement is needed. The description adds two operation-level traits beyond annotations: file_path must resolve within configured MCP allowed roots, and TELEGRAM_SEND_ENABLED=true must be set. These help the agent avoid permission and configuration failures.

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 short sentences. The first leads with the core action, and the second packs only the two operation-level constraints an agent must know. There is no filler, redundancy, or repetition of the title.

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?

With a full 5-parameter schema, detailed per-parameter descriptions, and an output schema, the description only needed to state purpose and operation-level constraints, which it does. The allowed-root restriction and environment flag complete the picture for a safe first call.

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 100%, and the schema already explains chat_id formats, file_path string/array support, caption, topic_id, and account behavior. The tool description only restates the file_path allowed-roots constraint already present in the schema, adding no new parameter semantics, so the baseline score 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 verb 'Upload and send' plus the resource 'local document or file to a chat' precisely states the operation. This clearly separates it from text-focused siblings like send_message and from download_media, so an agent can select it without opening the schema.

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 gives useful context: a local file, a target chat, and the TELEGRAM_SEND_ENABLED=true prerequisite. However, it never names alternatives or says when not to use this tool, such as using send_message for plain text or download_media for retrieval, so the usage guidance is implied rather than explicit.

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

send_messageSend Text Message to Telegram ChatA

Send a text message to a specified Telegram chat, group, channel, or user. Mutation operation requiring TELEGRAM_SEND_ENABLED=true. For replying to an existing message, prefer reply_to_message.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.
messageYesText content of the message to send or save as draft. Supports Markdown or HTML.
parse_modeNoText formatting parser: 'markdown' (default), 'html', or 'none'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark readOnlyHint=false, but the description adds the operational requirement TELEGRAM_SEND_ENABLED=true, which is not inferable from the schema. It also reinforces the mutation nature. While it does not detail side effects like duplicate delivery on retries, the existing annotations and output schema reduce that burden.

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 compact: two sentences that state the core action, the prerequisite, and the primary alternative. Every sentence adds distinct value and the most important information 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 four-parameter mutation tool with a full output schema, the description covers the essential selection and invocation needs: what it sends, where it sends, the required environment flag, and the sibling to use for replies. It does not mention sending files, but the 'text message' scope already implies `send_file` is for non-text media.

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 100%, so all four parameters are already well documented. The description's 'text message' phrasing aligns with the `message` parameter but adds little beyond what the schema provides. Baseline of 3 is appropriate since the schema carries the parameter-semantic weight.

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 ('send') with a clear resource ('text message') and target scope ('Telegram chat, group, channel, or user'). It also differentiates itself from the sibling `reply_to_message` by explicitly directing replying use cases away, making the tool's role unambiguous.

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 provides concrete usage context: it is a mutation, requires TELEGRAM_SEND_ENABLED=true, and explicitly tells the agent to prefer `reply_to_message` when replying to an existing message. This gives clear when-to-use and when-not-to-use guidance.

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

sync_chat_cacheSynchronize Chat History to Local ArchiveA
Read-onlyIdempotent

Synchronize remote Telegram chat messages into the local SQLite/FTS5 offline cache database. Use before performing offline text searches or when populating local message archives. To search already synced messages without Telegram API calls, use search_cached_messages. To verify database integrity and index status, use check_cache_health.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoSynchronization mode: 'incremental' (new messages since checkpoint) or 'full' (all messages in batch).incremental
limitNoMaximum number of items or records to retrieve (integer between 1 and 100).
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior1/5

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

The description states that the tool 'synchronizes ... into the local ... database', which is a write operation, but the annotations include readOnlyHint=true. This is a direct contradiction: readOnlyHint typically means the tool does not modify state. The description also fails to add other behavioral context beyond what annotations already provide, but the contradiction alone forces a score of 1 per the rubric.

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 with zero fluff. The first sentence states the core purpose, the second provides usage context and alternatives. Information is front-loaded and every word 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?

The description covers purpose, when to use, and alternatives. An output schema exists to describe return values, and annotations cover safety. The only gap is the contradiction with readOnlyHint, which makes the description slightly less reliable but does not leave out necessary call details. For a well-specified tool, this is nearly 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 coverage is 100%, so the schema fully documents all four parameters. The description adds no parameter-specific meaning beyond what is already in the schema, 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 uses a specific verb ('synchronize'), names the resource ('remote Telegram chat messages') and the target ('local SQLite/FTS5 offline cache database'), and explicitly differentiates from siblings by naming search_cached_messages and check_cache_health. This 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 Guidelines5/5

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

It gives explicit usage context ('Use before performing offline text searches or when populating local message archives') and names two alternatives with their purposes, effectively telling the agent when not to use this tool. This is textbook usage guidance.

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

unpin_messageUnpin Specific Message in ChatA
DestructiveIdempotent

Unpin a specific message from a chat or supergroup. Mutation operation requiring TELEGRAM_SEND_ENABLED=true. To pin a message, use pin_message.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoOptional account label for multi-account environments. If omitted in single-mode, the default account is used. In multi-mode without an account, read-only tools fan out across all configured accounts.
chat_idYesTarget Telegram chat, group, supergroup, channel, or user identifier. Accepts numeric chat ID (e.g. -1001234567890 or 123456789), username (e.g. '@channel'), or phone number.
message_idYesUnique integer ID of the target message within the specified chat.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds a valuable operational requirement: TELEGRAM_SEND_ENABLED=true must be set. This goes beyond what the schema or annotations provide. No contradiction with annotations was found.

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 only three short sentences: purpose first, then the prerequisite, then the alternative tool. 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.

Completeness4/5

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

For a simple tool with two required parameters, full schema coverage, and an output schema, the description is largely sufficient. It covers the operation, the required environment flag, and the sibling alternative. The scope phrase 'chat or supergroup' is slightly narrower than the schema's broader chat_id description, but this is 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 description coverage is 100%, with detailed descriptions for chat_id, message_id, and account. The description's phrases 'specific message' and 'chat or supergroup' loosely mirror the schema but add no new parameter-level meaning, 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 ('Unpin') and a specific resource ('a specific message from a chat or supergroup'), clearly distinguishing it from sibling tools like pin_message. The direct mention of pin_message as the inverse also reinforces what this tool does and does not do.

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 a clear context for use: removing a pinned message, and points to pin_message as the alternative operation when the goal is to pin instead. It also states the operational prerequisite TELEGRAM_SEND_ENABLED=true, which is useful guidance, though it does not enumerate exclusions or failure conditions.

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. 33 tool updatesv4.2.0
    • Removedcache_health
    • Addedcheck_cache_health
    • Addeddelete_message
    • Addeddownload_media
    • Addededit_message
    • Removedget_admins
    • Removedget_banned_users
    • Removedget_bot_info
    • Removedget_chats
    • Removedget_contact_chats
    • Removedget_contact_ids
    • Removedget_folder
    • Removedget_full_chat
    • Removedget_history
    • Removedget_last_interaction
    • Removedget_message_context
    • Removedget_photo_sheet
    • Removedget_pinned_messages
    • Removedget_privacy_settings
    • Removedget_recent_actions
    • Removedget_user_status
    • Removedlist_accounts
    • Removedlist_folders
    • Removedlist_messages
    • Removedlist_photos
    • Addedmark_as_read
    • Removedopen_photo
    • Addedpin_message
    • Addedreply_to_message
    • Removedsearch_global
    • Addedsend_file
    • Addedsend_message
    • Addedunpin_message
  2. 35 tool updatesv4.1.1
    • First observedcache_health
    • First observedget_admins
    • First observedget_banned_users
    • First observedget_bot_info
    • First observedget_chat
    • First observedget_chats
    • First observedget_contact_chats
    • First observedget_contact_ids
    • First observedget_folder
    • First observedget_full_chat
    • First observedget_history
    • First observedget_last_interaction
    • First observedget_me
    • First observedget_media_info
    • First observedget_message_context
    • First observedget_messages
    • First observedget_photo_sheet
    • First observedget_pinned_messages
    • First observedget_privacy_settings
    • First observedget_recent_actions
    • First observedget_user_status
    • First observedlist_accounts
    • First observedlist_chats
    • First observedlist_contacts
    • First observedlist_folders
    • First observedlist_messages
    • First observedlist_photos
    • First observedopen_photo
    • First observedresolve_username
    • First observedsearch_cached_messages
    • First observedsearch_contacts
    • First observedsearch_global
    • First observedsearch_messages
    • First observedsearch_public_chats
    • First observedsync_chat_cache

TDQS

A4.1/5.0

Scored across 22 tools

Disambiguation5/5

Every tool targets a distinct combination of resource and action, and descriptions explicitly cross-reference alternatives (e.g., get_messages vs search_messages, send_message vs reply_to_message, list_contacts vs search_contacts). Even the cached-search and live-search tools are clearly separated by offline/online behavior.

Naming Consistency5/5

All tool names consistently follow a snake_case verb_noun pattern, such as list_chats, get_messages, send_message, pin_message, and search_contacts. Minor multi-word phrases like check_cache_health or mark_as_read still fit the same readable convention without stylistic mixing.

Tool Count3/5

At 22 tools, the surface is noticeably heavy and borders on too many for the core purpose of interacting with Telegram. Each tool does add some distinct capability, but the cache-management cluster and multiple search variants contribute to a feeling of over-expansion.

Completeness4/5

The toolset covers the primary Telegram workflows well: reading chats and messages, sending/editing/deleting messages, replying, pinning, marking as read, file/media handling, contact lookup, public chat discovery, and offline cache search. Minor gaps such as forward_message, chat member management, and leaving chats mean it is not fully comprehensive for every possible account-level action.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to interact with Telegram accounts through MCP, supporting messaging, contacts, groups, media, and admin functions.
    4
    Apache 2.0
  • F
    license
    B
    quality
    C
    maintenance
    Enables MCP clients to interact with Telegram user accounts, providing tools for messaging, contacts, groups, channels, and media management through the Telegram API.
    85
    3
    -
  • A
    license
    B
    quality
    C
    maintenance
    Enables 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.
    28
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to drive a real Telegram account, exposing chats, messages, media, secret chats, admin rights, invite links, Mini Apps, and multi-account routing as callable tools.
    8
    GPL 3.0