Skip to main content
Glama
dikaglorya

telegram-mcp

by dikaglorya

Why this one

Most Telegram integrations give a bot a token. A bot only sees the chats it was added to, cannot read your history, and can never act as you. This project connects an agent to your account instead, so its tools operate on the chats, contacts and messages you already have.

  • Full account access. 69 tools spanning messages, chats, media, contacts, admin actions and session management.

  • Login without a terminal step. Credentials can be written by telegram_setup, and the first login happens entirely inside the chat — code and two-step password included.

  • One local process. stdio transport, no listening port, no cloud relay, no telemetry.

  • Cross-platform. Linux, macOS and Windows. Paths are resolved with path; POSIX permissions go through a shim that is a no-op on Windows.

  • Honest answers. Every state-changing tool reads the result back before reporting success. If Telegram accepted a call and ignored it, the tool tells you that instead of echoing the request.

Tools

69

Transport

stdio (Model Context Protocol)

Telegram API

MTProto, through GramJS

Runtime

Node.js ≥ 20

Package

@dikacode/telegram-mcp on npm

State

~/.telegram-mcp/ — session file 0600, state dir 0700

Network

outbound to Telegram only; no inbound port

Related MCP server: tlgrm

Quick start

npx -y @dikacode/telegram-mcp

That starts the server on stdio. In normal use you don't run it by hand: your MCP client spawns it. Add the server with one of the snippets in Connect your agent, restart the client, then ask the agent to log in.

If you would rather run from a checkout:

git clone https://github.com/dikaglorya/telegram-mcp.git
cd telegram-mcp
npm install
npm run build
cp .env.example .env
# add TELEGRAM_API_ID and TELEGRAM_API_HASH from my.telegram.org/apps
npm start

The server speaks MCP over stdio, so the last command is only a manual check. The code and the two-step password are typed in chat, never in a terminal.

Contents

Architecture

The agent spawns telegram-mcp as a child process and speaks JSON-RPC over stdin/stdout. The server holds one MTProto connection, signs in with a saved session, and translates each tool call into Telegram API requests. Nothing is exposed to the network: if the agent is not running, the server is not running.

agent  ── JSON-RPC / stdio ──▶  telegram-mcp  ── MTProto ──▶  Telegram
                                      │
                                      ├── ~/.telegram-mcp/session.txt   (0600)
                                      ├── ~/.telegram-mcp/audit.log     (redacted)
                                      ├── ~/.telegram-mcp/media/
                                      └── ~/.telegram-mcp/exports/

Two properties are deliberate:

  1. The session file is the credential. It is written with mode 0600 and never returned by a tool. The api_hash is only used to create that session.

  2. Tool output is data. Message text, names and files come from other people. The server labels untrusted content and never treats it as instructions; an agent should do the same.

Requirements

  • Node.js 20 or newer (22 LTS recommended).

  • A Telegram account you can log into on your phone.

  • An api_id and api_hash from my.telegram.org/apps. This is a one-time, free registration of a Telegram application.

  • A supported MCP client: OpenCode, Claude Code, Codex CLI, Cursor, Windsurf, Claude Desktop, or anything that can spawn a stdio MCP server.

Install

Pick one path. All of them end with a telegram-mcp process that speaks MCP over stdio.

1. From npm

The package ships compiled JavaScript, so there is no build step and no compiler on your machine.

npx -y @dikacode/telegram-mcp

Or install it once, globally:

npm install -g @dikacode/telegram-mcp
telegram-mcp

npx is the shortest thing to put in an MCP client config:

{
  "command": "npx",
  "args": ["-y", "@dikacode/telegram-mcp"]
}

Pin a version if you want reproducible installs: npx -y @dikacode/telegram-mcp@1.0.3.

Best if you want to read the code, pin a commit, or modify a tool.

git clone https://github.com/dikaglorya/telegram-mcp.git
cd telegram-mcp
npm install          # also runs the build
npm link             # optional: makes `telegram-mcp` available on PATH

npm install runs the prepare script, which compiles dist/. If you edit the TypeScript later, run npm run build again.

3. Release tarball

Download the tarball attached to the latest release and install it globally:

npm install -g https://github.com/dikaglorya/telegram-mcp/releases/download/v1.0.3/dikacode-telegram-mcp-1.0.3.tgz
telegram-mcp

The release tarball already contains the compiled dist/, so no build step is needed.

4. Unreleased commit from GitHub

Useful when you want a fix that has landed on main but is not in an npm release yet.

npx -y github:dikaglorya/telegram-mcp

npm fetches the repository, installs dependencies, runs the prepare build, and starts the launcher.

Updating

One command, whichever way it was installed:

telegram-mcp update

It works out how this copy got here and runs the right thing — npm install -g @latest for a global install (reusing a custom --prefix), git pull --ff-only plus a rebuild for a checkout, and a plain restart instruction for an npx run, where nothing on disk needs changing. --check reports and installs nothing.

telegram-mcp 1.0.3 · update

  installed   1.0.2  /home/you/.local/lib/node_modules/@dikacode/telegram-mcp
  latest      1.0.3
  install     global npm package

  ▲ 1.0.2 -> 1.0.3 available

Installed with

Behaviour

npx -y @dikacode/telegram-mcp (unpinned)

Automatic. npm resolves latest on every start, so the next client restart picks up a new release.

npx -y @dikacode/telegram-mcp@1.0.3 (pinned)

Never. That is the point of pinning.

npm install -g @dikacode/telegram-mcp

telegram-mcp update, or npm update -g @dikacode/telegram-mcp.

Release tarball

Manual. Reinstall from the newer tarball.

npx -y github:dikaglorya/telegram-mcp

Not automatic. npm caches the fetched repo; clear the cache or pin a ref (#main) to move forward.

Check what you are running:

telegram-mcp --version
telegram-mcp update --check                 # newer release available? installs nothing
npm outdated -g @dikacode/telegram-mcp      # global installs only

The server also tells you. When a newer release exists it prints one line to stderr at startup, after the MCP transport is already serving:

[telegram-mcp] update available: 1.0.2 -> 1.0.3. Run `npm install -g @dikacode/telegram-mcp@latest`, or set TELEGRAM_UPDATE_CHECK=0 to silence this.

That check is a single request to the npm registry with an 800 ms timeout, cached for 24 hours, and it never blocks startup or writes to stdout. If you want zero outbound traffic that is not Telegram itself, set TELEGRAM_UPDATE_CHECK=0. telegram_doctor shows the version it knows about without touching the network.

Credentials

  1. Open my.telegram.org/apps and log in with your phone number.

  2. Create an application if you do not have one. Any title and short name will do; platform can be Desktop.

  3. Copy the api_id (a number) and api_hash (32 hex characters).

There are two ways to give them to the server.

A. Let the agent write them. If your MCP client already starts the server, ask the agent to call telegram_setup with the two values. The tool writes a .env next to the installed package, preserves any other keys already there, and never returns the hash.

{ "apiId": "1234567", "apiHash": "0123456789abcdef0123456789abcdef", "allowAllChats": true }

B. Pass them in the client config. This is the most reliable option for npx, because the npm cache can be replaced. Put them in the env / environment block of your MCP client — see the snippets below.

Never paste an api_hash into a chat message, an issue, or a screenshot. If one leaks, revoke the application on my.telegram.org and create a new one.

First login — from chat

You don't have to run a login command or answer a terminal prompt. The server starts unauthenticated, and the first tool call returns a structured NOT_AUTHORIZED error. The agent then drives the login:

  1. telegram_login_start — sends a login code to your Telegram app. Pass phone in international format (or set TELEGRAM_PHONE beforehand).

  2. telegram_login_code — you type the code to the agent in chat; the agent passes it to this tool.

  3. telegram_login_password — only if two-step verification is enabled. Same rule: type it in chat, and the server will not echo or store it beyond the login.

  4. The session is written to ~/.telegram-mcp/session.txt with mode 0600. Later runs skip the login entirely.

telegram_login_cancel abandons a half-finished login and forgets the code. Login codes and 2FA passwords are stripped from the audit log before they are written.

The server holds a code or password only for the duration of one call, but the agent's chat transcript is outside this project's control. If you would rather not put a 2FA password in that transcript, run npm run login in a terminal instead.

Windows: the session still lives under your user profile. NTFS inherits the profile ACL; the POSIX 0600 call is a documented no-op.

Connect your agent

The server is the same in every client; only the wrapper differs. Use the npx form unless you cloned the repository, in which case replace the command with node /absolute/path/to/telegram-mcp/dist/index.js.

OpenCode

opencode.json (project) or ~/.config/opencode/opencode.json (global):

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "telegram": {
      "type": "local",
      "command": ["npx", "-y", "@dikacode/telegram-mcp"],
      "environment": {
        "TELEGRAM_API_ID": "1234567",
        "TELEGRAM_API_HASH": "0123456789abcdef0123456789abcdef"
      },
      "enabled": true
    }
  }
}

Claude Code

claude mcp add telegram \
  -e TELEGRAM_API_ID=1234567 \
  -e TELEGRAM_API_HASH=0123456789abcdef0123456789abcdef \
  -- npx -y @dikacode/telegram-mcp

Or commit a project-scoped .mcp.json:

{
  "mcpServers": {
    "telegram": {
      "command": "npx",
      "args": ["-y", "@dikacode/telegram-mcp"],
      "env": {
        "TELEGRAM_API_ID": "1234567",
        "TELEGRAM_API_HASH": "0123456789abcdef0123456789abcdef"
      }
    }
  }
}

Codex CLI

~/.codex/config.toml:

[mcp_servers.telegram]
command = "npx"
args = ["-y", "@dikacode/telegram-mcp"]

[mcp_servers.telegram.env]
TELEGRAM_API_ID = "1234567"
TELEGRAM_API_HASH = "0123456789abcdef0123456789abcdef"

Cursor

.cursor/mcp.json:

{
  "mcpServers": {
    "telegram": {
      "command": "npx",
      "args": ["-y", "@dikacode/telegram-mcp"],
      "env": {
        "TELEGRAM_API_ID": "1234567",
        "TELEGRAM_API_HASH": "0123456789abcdef0123456789abcdef"
      }
    }
  }
}

Windsurf

~/.codeium/windsurf/mcp_config.json uses the same mcpServers shape as Cursor.

Claude Desktop

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

Use the same mcpServers JSON as above, then restart the app.

Anything else

The contract is small: spawn a process, speak MCP JSON-RPC over stdio, pass the two environment variables. If your client supports stdio MCP servers, it supports this one.

Tools

Every tool is strict about its arguments: an undeclared key is rejected instead of silently dropped, so a typo can never make a tool answer about the wrong chat. Names are stable; the table is the full list.

Account & session

Tool

What it does

telegram_status

Connection, authorization and a summary of the signed-in account.

telegram_me

Your own profile: id, names, username, phone, Premium.

telegram_full_user

Every non-secret field of one user; defaults to you.

telegram_update_profile

Change your first/last name or bio.

telegram_user_photos

Profile photos of any user, with downloadable references.

telegram_set_my_photo

Set or remove your own profile photo.

telegram_list_sessions

Every device logged into the account, current one marked.

telegram_logout_session

Revoke one session, or all others with all=true.

telegram_doctor

Health check: env, state dir, session permissions, live auth.

telegram_setup

Write the server's .env (api_id, api_hash, phone, policy).

Login

Tool

What it does

telegram_login_start

Send the login code to the user's Telegram app.

telegram_login_code

Submit the code; reports needsPassword when 2FA is on.

telegram_login_password

Complete a 2FA login. The password is never echoed.

telegram_login_cancel

Abandon an in-progress login and forget the code.

Chats & dialogs

Tool

What it does

telegram_list_chats

List DMs, groups and channels, with unread and pin state.

telegram_chat_info

Title, username, id, type, member count, description.

telegram_chat_members

Participants of a group or channel, with roles.

telegram_chat_admins

Admins plus the exact rights each one holds.

telegram_folders

Chat folders and the peers/rules behind each one.

telegram_mute_chat

Mute for N days; 0 unmutes.

telegram_pin_chat

Pin or unpin a dialog in your own list.

telegram_archive_chat

Move a dialog to Archived, or back.

telegram_mark_read

Mark every message in a chat as read.

telegram_clear_history

Delete history from your side, or for everyone with revoke.

Groups & channels

Tool

What it does

telegram_create_group

Create a group with an explicit member list.

telegram_create_channel

Create a broadcast channel.

telegram_join_chat

Join a public chat by @username or invite link.

telegram_leave_chat

Leave a group or channel.

telegram_delete_chat

Delete a group/channel you own, history included.

telegram_edit_chat

Change a title or description (admin).

telegram_export_invite_link

Read or revoke an invite link (admin).

telegram_set_chat_photo

Set or remove a group/channel photo (admin).

telegram_invite_members

Add users to a chat you administer.

telegram_promote_admin

Grant, change or revoke admin rights.

telegram_kick_member

Kick or ban a member; unban reverses it.

Messages

Tool

What it does

telegram_get_history

Recent messages, newest first, with hasMore/nextOffsetId.

telegram_search_messages

Full-text search inside one chat, with paging.

telegram_search_global

Search every chat at once, with a server cursor.

telegram_get_message

Fetch one message by id.

telegram_send_message

Send text, with replyTo and topicId.

telegram_edit_message

Edit one of your own messages.

telegram_delete_messages

Delete messages by id; revoke for everyone.

telegram_forward_messages

Forward messages between chats.

telegram_react

Add or clear an emoji reaction.

telegram_pin_message

Pin or unpin one message in a chat.

telegram_unpin_all

Remove every pinned message at once.

telegram_pinned_messages

Read the current pinned messages.

telegram_typing

Show or cancel the typing indicator.

telegram_export_history

Dump a chat's history to JSON or JSONL on disk.

telegram_message_link

Build a t.me or tg:// link for a message or chat.

telegram_scheduled_messages

Messages queued to be sent later.

telegram_translate

Translate a message or a literal string.

telegram_send_poll

Send a poll or quiz with 2-10 answers.

Media

Tool

What it does

telegram_send_file

Send a local file as a document or auto-detected media.

telegram_send_photo

Send a local image as an inline photo.

telegram_send_location

Send a point with optional accuracy.

telegram_download_media

Download a message attachment to the local media dir.

telegram_list_downloads

The local download index, with exists checks.

telegram_delete_download

Drop an index row, optionally deleting the file.

Contacts & users

Tool

What it does

telegram_search_users

Find users and chats by name or @username.

telegram_get_contacts

Saved contacts with ids, usernames and phones.

telegram_add_contact

Save a user as a contact.

telegram_delete_contacts

Remove one or more saved contacts.

telegram_block_user

Block or unblock a user.

telegram_list_blocked

The current block list.

telegram_send_contact

Send a vCard into a chat without saving it.

telegram_common_chats

Groups and channels shared with another user.

Audit

Tool

What it does

telegram_audit_log

The server's own call log, secrets redacted.

telegram_audit_summary

Counts per tool and outcome, plus first/last call.

A few behaviours worth knowing:

  • Paging is explicit. History and search return hasMore plus a cursor (nextOffsetId, or nextOffsetRate for global search). Page two is not a guess.

  • Reads before writes. pin_message, mute_chat, mark_read, delete_messages, clear_history and friends read the state back and report what actually changed.

  • Errors carry a code and a hint. FLOOD_WAIT includes retryAfterSec; CHAT_ADMIN_REQUIRED names the missing right; NOT_AUTHORIZED tells the agent to start a login.

  • Files stay local. download_media and export_history write under ~/.telegram-mcp/; delete_download cleans the index and, optionally, the file.

  • Out of scope. Secret chats (end-to-end encrypted) and voice/video calls are not exposed by this server.

Security model

Full access is the default because that is the point of connecting your own account. The guardrails are there when you want them.

Layer

What it does

Transport

stdio only. The server never opens a TCP port.

Session

session.txt written with 0600; the containing directory is 0700.

Secrets

api_hash, login codes, 2FA passwords and session strings are redacted from audit.log and never returned by a tool.

Audit

Every call is appended with a timestamp, tool name, sanitized arguments and outcome. telegram_audit_log and telegram_audit_summary read it back.

Allowlist

Optional. Set TELEGRAM_ALLOWED_CHATS and TELEGRAM_ALLOW_ALL_CHATS=false to restrict every chat-taking tool to named chats.

Untrusted input

Message content is tagged as data. An agent must not follow instructions found in a message.

Sessions

telegram_list_sessions shows every device; telegram_logout_session revokes one, or all others with all=true.

The allowlist is a real gate, not a display filter: every tool resolves its target through the same policy check, and the test harness probes all of them for bypasses (npm run test:policy).

Configuration

All settings are environment variables. The server also loads a .env next to the installed package, so telegram_setup works without touching your shell.

Variable

Default

Purpose

TELEGRAM_API_ID

—

Required. Numeric app id from my.telegram.org.

TELEGRAM_API_HASH

—

Required. App hash from my.telegram.org.

TELEGRAM_PHONE

—

Optional international number. When set, login only asks for the code.

TELEGRAM_ALLOW_ALL_CHATS

true

Full access to every chat the account can reach.

TELEGRAM_ALLOWED_CHATS

—

Comma-separated allowlist: @name, numeric id, or exact title.

TELEGRAM_STATE_DIR

~/.telegram-mcp

State directory.

TELEGRAM_SESSION_PATH

~/.telegram-mcp/session.txt

Session file.

TELEGRAM_MEDIA_DIR

~/.telegram-mcp/media

Downloads.

TELEGRAM_EXPORT_DIR

~/.telegram-mcp/exports

History exports.

TELEGRAM_AUDIT_LOG

~/.telegram-mcp/audit.log

Call log.

TELEGRAM_MAX_DOWNLOAD_BYTES

0 (unlimited)

Hard cap for one download. A non-numeric value is refused rather than treated as unlimited.

TELEGRAM_UPDATE_CHECK

true

Set to 0 to stop the startup check for a newer npm release.

TELEGRAM_UPDATE_CHECK_TIMEOUT_MS

800

Timeout for that check, capped at 10 s.

TELEGRAM_MCP_NODE

current Node

Launcher override, for exotic Node installs.

~ and ~\ are both expanded. Relative paths resolve against the current working directory.

Troubleshooting

Symptom

Cause and fix

[NOT_AUTHORIZED]

No valid session. Call telegram_login_start; the agent can do this for you.

[FLOOD_WAIT] with retryAfterSec

Telegram is throttling this account. Wait the stated number of seconds. Do not parallelize identical writes; chat creation and contact edits are the usual triggers.

[AUTH_KEY_DUPLICATED]

The saved session was replaced by a newer login. Run npm run login:force once, then restart the agent.

[CHAT_ADMIN_REQUIRED]

The account is an admin but lacks that specific right. Only the chat creator can grant it; an admin cannot grant it to themselves.

[PREMIUM_ACCOUNT_REQUIRED]

Some reactions and account features need Telegram Premium. The tool reports this cleanly instead of pretending.

TELEGRAM_API_ID is not set

The MCP client did not pass the environment. Check the env / environment block and restart the client.

Cannot find module .../dist/index.js

The package was installed without building. Run npm run build, or use the release tarball.

Login works, then the next run asks again

TELEGRAM_SESSION_PATH changed between runs. Keep it stable, or leave it unset.

Window/terminal closes when started by hand

Expected: the server speaks MCP on stdio. Start it through a client, or use npm run login for the standalone CLI.

update available: … on every start

A newer release is on npm. Run telegram-mcp update, or set TELEGRAM_UPDATE_CHECK=0 if you pin versions on purpose.

telegram-mcp update finds no upgrade command

The copy lives in a node_modules tree npm does not manage as a global prefix (npx cache, or a project dependency). Restart it as npx -y @dikacode/telegram-mcp@latest, or upgrade the project dependency.

telegram-mcp --version prints nothing

You are on 1.0.0, which predates the flag. Upgrade to 1.0.1 or newer.

Development

The repository ships with a unit suite and a real MCP harness that spawns the built server and calls tools over stdio.

npm install
npm run build

npm run test:unit          # 72 offline checks
npm run test:mcp           # read-only end-to-end pass
npm run test:mcp:write     # + self-cleaning writes
npm run test:destructive   # + disposable chats (opt-in, flood-limited)
npm run test:policy        # allowlist bypass probes
npm run test:mcp -- --doctor

The end-to-end harness reads from a public channel by default. Point it at a chat you control for the full picture:

TELEGRAM_TEST_CHAT=@your_channel npm run test:mcp
TELEGRAM_HARNESS_CHAT=-1001234567890 npm run test:destructive

TELEGRAM_HARNESS_CHAT must be a chat the account administers; it enables the rename, invite-link and admin-list round trips. Without it those scenarios report an honest skip instead of a fake pass.

--destructive creates and deletes real groups and channels. Telegram flood-bans that aggressively. If a run hits FLOOD_WAIT, stop and wait; --cleanup and --reclaim exist for the debris an interrupted run can leave.

The harness also supports --json, --only=tool_a,tool_b, --cleanup, --reclaim, --allow=@chat, --deny=me and --doctor. See harness/README.md for the full behaviour, including how artifacts are verified and removed.

Project layout

telegram-mcp/
├── bin/telegram-mcp.js      portable launcher (finds Node, then dist/index.js)
├── cli/                     standalone login, doctor and update commands
├── assets/                  animated README art (SVG, no scripts)
├── harness/                 unit checks + end-to-end MCP harness
├── index.ts                 stdio entrypoint
├── server.ts                tool registration
├── server-registry.ts       strict schemas, secret-arg scrubbing, tool guards
├── account.ts               profile, users, photos, sessions
├── chats.ts                 dialogs, chat settings, history
├── messages.ts              send/edit/delete/forward/pin/search/export
├── media.ts                 uploads, downloads, local index
├── contacts.ts              contacts, blocking, user search
├── admin.ts                 members, admins, invites, bans
├── extras.ts                polls, translation, folders, scheduled messages
├── login-tools.ts           in-chat login state machine
├── setup-tools.ts           telegram_setup and telegram_doctor
├── security.ts              policy inspection and session hygiene
├── audit.ts / audit-tools.ts call log and its reader
├── config.ts                env parsing and path resolution
├── telegram.ts              GramJS client lifecycle
├── errors.ts                RPC error normalization
└── perms.ts                 POSIX 0600/0700 with a Windows no-op

The TypeScript is built with tsc to dist/. There is no bundler; the published package is the compiled tree plus the launcher.

Release

v1.0.3 is the current release, published to npm as @dikacode/telegram-mcp.

  • 69 MCP tools, all registered with strict input schemas.

  • In-chat login, including two-step verification.

  • Session file 0600, state directory 0700.

  • Read-back verification for state-changing tools.

  • Optional allowlist, audited calls, redacted secrets.

  • Cross-platform launcher; no hardcoded paths.

  • --version / --help, and a startup notice when a newer release exists.

  • telegram-mcp update upgrades whichever layout is installed; --check reports without touching anything.

  • End-to-end harness with paging, policy probes and artifact cleanup.

See CHANGELOG.md for the full release notes. Release artifacts are on the releases page.

Reporting a bug

Open an issue here: https://github.com/dikaglorya/telegram-mcp/issues/new/choose

You get two forms — Bug report and Feature request. The bug form asks for the version, install path, MCP client, OS, the tool involved, the error code, steps to reproduce, and telegram_doctor output. That is enough to reproduce most failures without a round trip.

If the server will not start at all, say so and paste the client's server log; the launcher prints one line explaining what is missing before it starts serving.

What not to put in an issue. Never include an api_hash, a session string, a login code, a 2FA password, your phone number, or the text of a private message. Chat ids and usernames of private chats should be redacted too. An issue is public and indexed the moment you submit it.

Security problems go private. Secret leakage, allowlist bypass, path traversal, session handling bugs, or a write tool that reports success without changing anything should go through GitHub's private advisory flow: Security → Advisories → Report a vulnerability (direct link: https://github.com/dikaglorya/telegram-mcp/security/advisories/new). That flow is enabled on this repository. SECURITY.md lists what is in scope and what is not — FLOOD_WAIT and account restrictions from automated behaviour are Telegram's, not vulnerabilities.

Before you report, the troubleshooting table already covers NOT_AUTHORIZED, FLOOD_WAIT, AUTH_KEY_DUPLICATED, CHAT_ADMIN_REQUIRED, PREMIUM_ACCOUNT_REQUIRED, a missing TELEGRAM_API_ID, and a missing dist/. A quick telegram_doctor call answers most "it will not connect" reports in one shot.

Contributing

Issues and pull requests are welcome. A useful PR is small, explains the failure it fixes, and includes a test that fails without it.

Before opening a PR:

npm run build
npm run test:unit
npm run test:mcp

Guidelines:

  • Keep the strict-schema contract: a new tool declares every argument it accepts.

  • A state-changing tool reads its result back; do not report the request as the outcome.

  • Never log or return api_hash, session strings, login codes or 2FA passwords.

  • Do not add a dependency when the standard library or an existing dependency already does the job.

  • Match the surrounding style: two-space indent, explicit types at module boundaries, comments that explain why.

For a security issue, follow SECURITY.md. Do not open a public issue containing a session string, an api_hash or private message content.

License

MIT — see LICENSE.

Contributors

Role

dikaglorya

creator and maintainer

you

contributions welcome

See CONTRIBUTORS.md for the canonical list. Contributions are credited in the release notes for the version that includes them.

Available Tools

69 tools
telegram_add_contactAdd contactC

Save a Telegram user as a contact by @username or user id.

ParametersJSON Schema
NameRequiredDescriptionDefault
userYes
phoneNo
lastNameNo
firstNameYes

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare this as a non-read-only, open-world operation, and the description only restates the save-contact behavior. It does not disclose permission requirements, duplicate-contact behavior, whether phone is needed, or what happens on success.

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?

A single efficient sentence with the core action and identifier forms front-loaded. There is no redundant or filler text.

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

Completeness2/5

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

For a mutation tool with four parameters and no output schema, the description is too sparse. It leaves required parameter semantics, side effects, and failure/duplicate behavior undocumented.

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

Parameters2/5

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

Schema description coverage is 0% for four parameters. The description usefully clarifies that 'user' accepts an @username or user id, but it does not explain the required 'firstName' or the optional 'phone' and 'lastName' parameters.

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 gives a specific verb and resource ('Save ... as a contact') and clarifies that the user can be identified by @username or user id. It is clear against most siblings, but it does not explicitly distinguish itself from nearby contact/user tools such as get_contacts, delete_contacts, or search_users.

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

Usage Guidelines2/5

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

It explains the acceptable user identifier formats but gives no guidance on when to use this tool versus alternatives like search_users, get_contacts, or send_contact. No prerequisites, duplicate-handling conditions, or exclusions are stated.

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

telegram_archive_chatArchive / unarchive a chatB

Move a chat into the Archived folder or back to the main list. Local to the account. Folder id 0 means 'not archived'; 1 is the default archive folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
archivedNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and openWorldHint=false, so the mutation and local-scope nature are partly covered structurally. The description usefully reinforces 'Local to the account' (no effect on other participants) and implies reversibility via 'or back to the main list,' but it omits idempotency, behavior when the chat is already archived, and error/permission cases.

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

Conciseness4/5

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

Three short, front-loaded sentences with no filler; the purpose leads and the scoping caveat follows. The folder-id sentence is compact but introduces a confusing concept that does not correspond to any actual parameter.

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

Completeness3/5

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

For a simple two-parameter mutation with no output schema, the description covers purpose and the archived/not-archived intent, but leaves the required `chat` identifier format and failure/idempotency behavior undocumented. Adequate but with a clear gap around the mandatory parameter.

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

Parameters2/5

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

Schema coverage is 0% for both parameters. The description spends its only parameter-like detail on a 'folder id' (0 vs 1) that does not exist in the schema, only loosely mapping onto the `archived` boolean, and says nothing about the required `chat` parameter (id vs username vs title). This leaves the required parameter completely unspecified.

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 gives a specific verb and resource ('Move a chat into the Archived folder or back to the main list'), which is unambiguous and clearly distinct from siblings like telegram_mute_chat, telegram_pin_chat, or telegram_delete_chat. It stops short of explicitly naming alternatives, but the resource itself is unique enough that an agent can route correctly.

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

Usage Guidelines3/5

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

The description implies when to use it (archiving/unarchiving) and adds the scoping note 'Local to the account,' but offers no explicit when-not conditions, prerequisites, or comparison to alternatives such as telegram_folders. Usage is inferable rather than stated.

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

telegram_audit_logRead the local audit logA
Read-only

Read this server's own call log, newest first. Every tool call is appended with timestamp, tool name, sanitized args and outcome; secrets are redacted at write time. Optional filters: tool name and outcome ('ok' | 'error'). Purely local — nothing is read from Telegram.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNo
limitNo
outcomeNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint=false, so safety is covered; the description adds genuinely useful behavior: append-on-every-call, timestamp/args/outcome fields, and secret redaction at write time. It omits pagination and limit behavior, keeping it short of a 5.

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

Conciseness5/5

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

Three dense sentences, front-loaded with the core action and scope, followed by the record contents and filters. No filler, no repetition of the title.

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

Completeness4/5

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

With no output schema, the description usefully describes what each log entry contains and how filtering works. The only missing piece an agent needs to call it correctly is the limit/pagination semantics, which is minor for an optional read tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It documents two of three parameters well (tool name filter, outcome enum values), but never mentions 'limit' or its default of 50 and max of 500, leaving a real gap.

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 ('Read this server's own call log') with scope and ordering ('newest first'), and explicitly contrasts with the Telegram-facing siblings ('nothing is read from Telegram'). An agent can distinguish it from telegram_audit_summary and the rest of the catalog without inspecting schemas.

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 clear context for when this applies (inspecting this server's own call history) and lists the optional narrowing filters with the accepted outcome values. It does not explicitly name the sibling alternative (telegram_audit_summary) or state when-not to use it, 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.

telegram_audit_summarySummarize the audit logA
Read-only

Counts per tool and per outcome from the local audit log, plus the first and last recorded call. Use it to see what an agent has actually done to the account, without paging through entries.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely useful context beyond that: the source is the local audit log and the return shape is counts by tool and outcome plus first/last call, which helps an agent reason about what it will get back. It stops short of stating any retention/coverage window for the log.

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 output content is front-loaded in the first sentence and the use case follows immediately, so an agent can decide relevance after one line.

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

Completeness4/5

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

With no output schema and no parameters, the description carries the burden of describing the return value, and it does so reasonably well (counts per tool, per outcome, first/last call). The one gap is that it never says how much history the local audit log covers, which an agent gauging the summary's significance would want to know.

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

Parameters4/5

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

The tool takes no parameters, so per the rubric the baseline is 4. The description correctly implies the summary is unscoped, and nothing in the text misrepresents the empty 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 names a specific verb and resource ('Counts per tool and per outcome from the local audit log') and goes further to specify the exact aggregation output, including the first and last recorded call. This is far more precise than the title and lets an agent know it is a roll-up view rather than a raw listing.

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

Usage Guidelines4/5

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

'Use it to see what an agent has actually done to the account, without paging through entries' states a clear use case and implicitly contrasts with entry-by-entry browsing. It does not name the sibling telegram_audit_log as the alternative for detail, so the when-not condition is only implied.

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

telegram_block_userBlock / unblock a userA

Block or unblock a user. A blocked user cannot message you or see your profile. Pass unblock=true to reverse it.

ParametersJSON Schema
NameRequiredDescriptionDefault
userYes
unblockNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, so the mutation and external-visibility profile is already covered. The description adds real behavioral value beyond that: the concrete effect ('cannot message you or see your profile') and the fact that the action is reversible.

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 action, then effect, then reversal. 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.

Completeness4/5

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

For a two-parameter tool with no output schema and adequate annotations, the description covers the action, effect, and reversibility. The only meaningful gap is the accepted format for identifying the user.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It explains the 'unblock' flag clearly (true reverses the block), which the bare boolean schema does not, but it never clarifies the 'user' parameter format (username vs. ID) despite that being the required argument.

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?

States a specific verb+resource ('Block or unblock a user') and clarifies the toggle direction. It is inherently distinguishable from siblings like telegram_kick_member or telegram_delete_contacts, though it does not explicitly name any alternative to contrast against.

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?

Usage is implied by the reversal instruction ('Pass unblock=true to reverse it'), which gives operational context. However, there is no explicit guidance on when to block versus kicking a member or deleting a contact, and no prerequisites or exclusions are stated.

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

telegram_chat_adminsList chat administratorsA
Read-only

List the admins of a group or channel with the rights each one holds and their custom rank. Uses the dedicated admin filter, so it does not page through every member.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
limitNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds useful behavioral context beyond that: what each entry contains (rights and custom rank) and the fact that it uses a dedicated server-side filter rather than enumerating members.

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 with the purpose front-loaded and the efficiency note second; nothing is wasted or redundant.

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

Completeness3/5

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

For a read-only list tool with annotations covering safety and no output schema, describing the return contents is a plus. However, the total absence of parameter documentation leaves the caller guessing how to address the chat, which is a real gap for a tool whose only required argument is that identifier.

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

Parameters2/5

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

Schema description coverage is 0% with two parameters, so the description must carry the burden and does not. It never explains the required 'chat' identifier format (username vs numeric ID) nor the 'limit' parameter's default of 50 and max of 200.

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 (admins of a group or channel), plus the returned detail (rights held, custom rank). The 'dedicated admin filter, so it does not page through every member' clause implicitly distinguishes it from the sibling telegram_chat_members, which returns all members.

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 efficiency clause ('does not page through every member') hints that this is the preferred path over listing all members, but no sibling is named and there are no explicit when-to-use or when-not-to-use conditions.

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

telegram_chat_infoChat infoB
Read-only

Fetch detailed info for a chat/user/channel: title, username, id, type, member count, description.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds value by listing the returned fields, but says nothing about auth requirements, failure behavior for invalid identifiers, or whether member count is expensive to compute.

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

Conciseness4/5

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

A single front-loaded sentence with no wasted words; the verb and resource lead and the field list follows. Efficient, though it omits the input detail that would make the sentence earn more of its place.

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

Completeness3/5

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

With no output schema, the description usefully enumerates return fields, which is appropriate. However, it leaves the required input format unexplained and gives no routing context among many chat-related siblings, so it is only minimally complete for this tool.

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

Parameters2/5

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

Schema description coverage is 0% for the single required 'chat' parameter, so the description carries the full burden — yet it never explains what 'chat' accepts (numeric id, @username, phone, invite link). It merely restates the resource, adding no input-format meaning beyond the bare schema.

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?

States a specific verb (Fetch) and resource (info for a chat/user/channel) and enumerates the returned fields, so the agent knows exactly what it gets back. It is clear, though it doesn't explicitly differentiate itself from siblings like telegram_full_user or telegram_chat_members.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no alternatives named. With close siblings such as telegram_full_user, telegram_chat_members, and telegram_list_chats in the namespace, the agent gets no help deciding when this tool is the right choice.

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

telegram_chat_membersChat membersB
Read-only

List participants of a group/channel (if permitted). Returns id, name, username, role.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
limitNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read profile is covered. The description adds the meaningful 'if permitted' caveat (a permission requirement beyond the annotations) and the return fields, but says nothing about pagination or how limit affects results.

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

Conciseness4/5

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

Two tight sentences with the core action front-loaded and the return shape immediately following. No filler, though the parenthetical caveat is slightly buried rather than integrated into the sentence flow.

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

Completeness3/5

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

For a read-only listing tool with no output schema, describing the returned fields (id, name, username, role) is the right instinct. However the permission precondition stays hand-wavy and the limit/pagination behavior is entirely absent, leaving gaps for an agent invoking a paged 500-item list.

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

Parameters2/5

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

Schema description coverage is 0% and neither parameter is documented by the schema, so the description must compensate. It does not: 'chat' is only implied by the group/channel phrasing, and 'limit' (default 100, max 500) is never explained or bounded.

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?

States a specific verb and resource ('List participants of a group/channel') and adds the returned fields, so the agent knows exactly what it retrieves. It does not name the closest sibling telegram_chat_admins, so the boundary between 'all members' and 'admins only' is left implicit.

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

Usage Guidelines2/5

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

The only usage signal is the parenthetical '(if permitted)', which hints at a permission precondition but is vague about when listing works. There is no guidance on when to choose this over telegram_chat_admins or telegram_common_chats, and no exclusions given.

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

telegram_clear_historyClear a chat's historyB
Destructive

Delete messages from a chat. Defaults to your own copy only (revoke=false). revoke=true also removes them for everyone, which needs the rights to do so. Returns the message count Telegram reports as affected when it says.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
maxIdNo
revokeNo

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true. The description adds valuable context beyond annotations: default revoke=false deletes only your own copy, revoke=true removes messages for everyone and requires rights to do so, and it returns a message count from Telegram. This covers permission needs, deletion scope, and return behavior.

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

Conciseness4/5

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

The description is three concise sentences, front-loaded with purpose then behavior. Every sentence adds information, though the final sentence about the return value is slightly awkwardly phrased. No unnecessary filler.

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

Completeness3/5

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

For a 3-parameter mutation tool with no output schema, the description covers deletion scope, permission requirements, and return value. However, it omits explanation of the maxId parameter and does not clarify how this differs from telegram_delete_messages, leaving gaps for correct invocation.

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

Parameters2/5

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

Schema coverage is 0%, so the description must compensate. It explains the revoke parameter well (default false, true removes for everyone, needs rights), but leaves the maxId parameter completely undocumented and only implicitly covers 'chat'. Partial compensation warrants a low score.

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?

States a clear verb and resource: 'Delete messages from a chat.' However, it does not differentiate this tool from sibling telegram_delete_messages, which appears to delete individual messages rather than clear an entire chat history. The tool name suggests scope, but the description alone is slightly ambiguous.

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

Usage Guidelines2/5

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

The description explains the revoke parameter's effect but gives no guidance on when to use this tool versus alternatives like telegram_delete_messages or telegram_delete_chat. No when-to-use or when-not-to-use conditions are provided.

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

telegram_common_chatsChats shared with a userB
Read-only

List the groups and channels this account has in common with another user.

ParametersJSON Schema
NameRequiredDescriptionDefault
userYes
limitNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the mutual-membership scope but says nothing about pagination, ordering, or whether the target user must be a known contact, so it sits at the annotated baseline.

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?

A single front-loaded sentence that states the resource, scope, and relationship in one clause. No filler or redundancy.

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

Completeness3/5

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

For a simple read-only list tool with no output schema and annotations covering safety, the description is adequate on purpose but leaves the parameter formats undocumented. An agent can identify the tool but may guess wrong on the 'user' identifier format.

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

Parameters2/5

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

Schema description coverage is 0% for two parameters, so the description must compensate and does not. It does not clarify whether 'user' takes a username, ID, or phone number, nor does it explain the 'limit' cap or default beyond what the schema states.

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?

Specific verb ('list') plus a precisely scoped resource ('groups and channels this account has in common with another user'). This is clearly distinguishable from telegram_list_chats by the 'in common with another user' qualifier, though the description never names that sibling explicitly.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance. The phrase 'in common with another user' implies the use case but the description offers no prerequisites, no alternatives, and no conditions for choosing this over telegram_list_chats or telegram_full_user.

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

telegram_create_channelCreate a channelC

Create a broadcast channel with the given title and optional description.

ParametersJSON Schema
NameRequiredDescriptionDefault
aboutNo
titleYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the description is not obligated to restate that this is a write. It adds only that the result is a 'broadcast channel' and says nothing about ownership, who can post, visibility, or what happens on failure — context the annotations do not provide.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. Nothing is wasted, but there is also little structure beyond that one clause.

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

Completeness3/5

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

For a two-parameter mutation tool with no output schema, the description covers the inputs but omits what the caller gets back (e.g., a channel ID) and any authorization or rate-limit context. It is minimally adequate rather than 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 0%, so the description must compensate. It does map both parameters ('title' and optional 'description', i.e. about), which is better than nothing, but it gives no length limits, format hints, or the naming mismatch between 'about' and 'description'.

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?

States a specific verb and resource ('Create a broadcast channel') and qualifies the channel type as broadcast, which separates it from telegram_create_group. It does not, however, explicitly name the sibling it differs from, so it falls short of a 5.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus telegram_create_group or the other chat-management tools, and no prerequisites (e.g., permission or account requirements) are mentioned. Usage is only implied by the verb 'Create'.

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

telegram_create_groupCreate a groupB

Create a new group chat with the given users (by @username or id) and a title.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
usersYes

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the write/network profile is covered. The description adds nothing beyond that: it does not say whether the creating account becomes admin, what permissions are required, or what happens if a user in the list is invalid.

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?

A single front-loaded sentence with no filler; the verb, resource, and inputs all appear immediately.

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

Completeness3/5

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

Adequate for a two-parameter mutation with no output schema, but thin for a write operation that creates persistent server-side state. Missing failure modes, permission requirements, and the effect on the caller's admin role.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry both parameters — and it does, clarifying that 'users' accepts @username or numeric id and that a title is required. It does not state limits on user count or whether users must be contacts, but it closes the main gap.

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?

States a specific verb (create) and resource (group chat), and mentions the two inputs. It implicitly distinguishes itself from telegram_create_channel by saying 'group chat', but never names the channel sibling to make the boundary explicit.

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

Usage Guidelines2/5

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

No guidance on when to create a group versus creating a channel (telegram_create_channel) or joining one (telegram_join_chat), and no prerequisites or preconditions are stated. The agent must infer usage from the name alone.

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

telegram_delete_chatDelete a group or channelA
Destructive

Permanently delete a group or channel this account owns, including its history. This is the counterpart of telegram_create_group / telegram_create_channel, and is stronger than telegram_leave_chat: the chat stops existing for everyone, not just for this account. Only the creator can delete; Telegram refuses otherwise.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, but the description goes further by disclosing that deletion is permanent, that chat history is destroyed, that the chat ceases to exist for all members (not just this account), and that the operation is restricted to the creator. That permission constraint and irreversibility disclosure exceed what annotations provide.

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

Conciseness5/5

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

Three tight sentences: the destructive action first, then the sibling comparison, then the permission constraint. Every clause adds distinct decision-relevant information with no filler.

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

Completeness4/5

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

For a one-parameter destructive tool, the description covers irreversibility, scope of effect, and authorization. The only real gap is the missing format guidance for the 'chat' argument, which the bare schema does not fill in.

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?

Single parameter 'chat' with 0% schema description coverage, so the schema contributes nothing about accepted formats (username, numeric id, or invite link). The description never clarifies what the identifier should look like, leaving the one required parameter underspecified despite its simplicity.

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 (delete), resource (group or channel), and scope (permanent, including history, for the account owner). It explicitly distinguishes itself from telegram_leave_chat and frames itself as the counterpart of telegram_create_group/telegram_create_channel, so an agent can pick it without opening other 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?

Gives explicit when/when-not routing: it names telegram_leave_chat as the weaker alternative for leaving only, and states the prerequisite that only the creator can delete ('Telegram refuses otherwise'). No inference required to choose between delete, leave, or create.

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

telegram_delete_contactsDelete contactsA

Remove saved contacts by @username, user id, or numeric id. This is the inverse of telegram_add_contact and may remove several at once. The account stays subscribed to nothing new — it only forgets the saved contact entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
usersYesUsers to forget, by @username or id.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark this as not read-only and open-world, so the mutation type is known. The description adds useful behavioral context by explaining that the account 'stays subscribed to nothing new' and 'only forgets the saved contact entry,' which clarifies the scope of deletion beyond simple mutation hints.

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 three short sentences with the core action front-loaded. The final sentence explains scope without unnecessary repetition or filler.

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

Completeness4/5

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

For a one-parameter mutation tool with no output schema, the definition covers the important semantic boundaries: what is removed, what is not changed, and that multiple identifiers are allowed. It could be slightly stronger if it explicitly stated irreversibility or expected confirmation behavior, but the core context is present.

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

Parameters4/5

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

Schema coverage is 100%, so the single parameter is already documented. The description still adds meaning by listing accepted identifier formats ('@username, user id, or numeric id') and confirming that several contacts may be passed at once, which goes slightly beyond the schema's brief parameter note.

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

Purpose5/5

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

The description states a specific verb and resource ('Remove saved contacts') and explicitly distinguishes the tool from its inverse, telegram_add_contact. It also clarifies that multiple contacts may be removed in one call, so an agent can identify the operation 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 Guidelines4/5

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

It gives clear context by naming the inverse operation and noting batch removal, which helps route between adding and deleting contacts. However, it does not explicitly address when to use this instead of related actions like telegram_block_user, nor does it state when this tool should not be used.

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

telegram_delete_downloadDelete a download recordA

Remove one record from the local downloads index by its id, optionally deleting the file it points at. This is local bookkeeping only — nothing is deleted on Telegram. Use it to prune records whose file is already gone (telegram_list_downloads reports exists:false for those).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
deleteFileNo

TDQS

A4.7/5.0
Behavior4/5

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

The description adds important behavioral context beyond annotations: the action is local-only and does not affect Telegram, and it may optionally delete the referenced file. It does not explicitly state whether file deletion is irreversible, which is a relevant side-effect detail for a destructive local operation.

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 three compact sentences with no filler. The core action, local-only scope, and primary use case are front-loaded and easy to scan.

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 two-parameter local bookkeeping tool with no output schema, the description covers what the tool does, what it does not do, and the main scenario for using it. Nothing essential is missing for correct tool selection.

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

Parameters4/5

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

The description explains the semantic role of both parameters: id identifies the record, and the second option controls deletion of the referenced file. However, it does not highlight the schema default of deleteFile=true, which is important because omitting the parameter still deletes the file.

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

Purpose5/5

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

The description states a specific verb and resource: removing one record from the local downloads index by id, optionally deleting the referenced file. It clearly distinguishes this from Telegram-side deletion and references the related sibling telegram_list_downloads.

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 an explicit usage condition: prune records whose file is already gone, identified via telegram_list_downloads reporting exists:false. It also clarifies when-not use by stating this is local bookkeeping only and nothing is deleted on Telegram.

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

telegram_delete_messagesDelete messagesA
Destructive

Delete one or more messages in a chat by id. revoke=true deletes for everyone (your messages).

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
revokeNo
messageIdsYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false, so the write/destructive nature is covered structurally. The description adds real context beyond that: revoke=true scopes the deletion to everyone and is limited to '(your messages)'. It still leaves revoke=false behavior (delete-for-me-only) and irreversibility unstated.

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

Conciseness4/5

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

Two tight sentences with no filler, and the core action plus the revoke switch are front-loaded. It is efficient, though the extreme terseness is part of why several parameter and behavioral gaps persist.

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

Completeness3/5

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

For a destructive, open-world tool with three parameters at 0% schema coverage and no output schema, the description is only partly sufficient. It never states that deletion is irreversible, what revoke=false does, or what identifier formats 'chat' accepts; annotations cover the safety hint but not these operational details.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the load. It clarifies messageIds as message ids and gives semantics for revoke, but the 'chat' string parameter's accepted format (@username, numeric id, phone) is undocumented in both schema and description, and the default revoke=true is only implied.

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 gives a specific verb+resource ('Delete one or more messages in a chat by id'), which an agent can distinguish from siblings like telegram_clear_history, telegram_delete_chat, and telegram_delete_contacts. It does not, however, explicitly state how it differs from clear_history (bulk chat wipe) or delete_chat (whole-conversation removal).

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?

Usage is implied: target individual message ids rather than an entire chat. It gives no explicit when-to-use / when-not-to-use guidance versus the closely related telegram_clear_history or telegram_delete_chat, and states no prerequisites (e.g., needing to own the message or be an admin).

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

telegram_doctorTelegram health checkA
Read-only

Read-only health check: config, installed version, state dir, session presence, session file permissions (auto-repaired to 0600), and live authorization. Returns { healthy, checks[], account }. A missing or unauthorized session is reported as a failed check, not an error — call telegram_login_start to fix it. An available update is informational and never fails the check. Never returns the api_hash or the session string.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior1/5

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

The description contains rich behavioral details, but it explicitly calls this a 'read-only health check' while also stating that session file permissions are 'auto-repaired to 0600'. That auto-repair is a write/side effect and contradicts the readOnlyHint=true annotation.

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

Conciseness5/5

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

The description is compact and front-loaded: it starts with the read-only health-check purpose, then lists checks, return shape, failure semantics, and secrecy guarantees. Every sentence supplies useful information for calling or interpreting the tool.

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 no output schema, the description fully carries the return contract: { healthy, checks[], account }. It also explains how missing/unauthorized sessions are surfaced, how updates are treated, and that sensitive values are never returned.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics burden. The schema is empty and fully consistent with the description, which appropriately says nothing about 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 a specific verb+resource (read-only health check) and enumerates exactly what is checked: config, installed version, state dir, session presence, session file permissions, and live authorization. It also states the return shape, so an agent can distinguish this diagnostic tool from message/chat operations and login tools.

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

Usage Guidelines4/5

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

It gives clear remediation guidance: a missing or unauthorized session is a failed check and telegram_login_start should be called to fix it. It also clarifies that an available update is informational and never fails the check. It does not explicitly say when to use this versus telegram_status, but the diagnostic purpose is clear.

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

telegram_download_mediaDownload mediaB

Download the attachment of a message to the local media directory. Returns local path + size. Set TELEGRAM_MAX_DOWNLOAD_BYTES in env for a cap (0 = unlimited).

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
fileNameNo
messageIdYes

TDQS

B3.1/5.0
Behavior3/5

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

Adds real context beyond the annotations: it discloses the destination directory, the return shape (local path + size), and the TELEGRAM_MAX_DOWNLOAD_BYTES env cap including the 0 = unlimited edge case. However it doesn't cover overwrite behavior for existing files, what happens when the cap is exceeded, or auth requirements.

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 action, then the return value, then the env cap detail. No waste.

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

Completeness3/5

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

There is no output schema, and the description compensates by stating the return values. Still incomplete for a write-to-disk tool: file naming/overwrite rules, error cases, and parameter meanings are missing.

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

Parameters2/5

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

Schema description coverage is 0%, so all three parameters (chat, messageId, optional fileName) rely on the description, which says nothing about them. Only a weak implication that fileName relates to the attachment's saved name.

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?

States a specific verb and resource: downloading a message attachment to the local media directory. It is clearly distinguishable from siblings like telegram_list_downloads and telegram_delete_download, though it never names them.

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

Usage Guidelines2/5

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

No guidance on when to use this versus list_downloads/delete_download, nor on prerequisites such as the message actually having an attachment. Usage must be inferred entirely from the name.

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

telegram_edit_chatEdit a group or channelA

Change a group/channel title and/or description. Needs admin rights; Telegram refuses otherwise. Omit a field to leave it untouched. Titles are 1-128 chars, about is up to 255.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
aboutNo
titleNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and openWorldHint=true; the description adds real behavioral context beyond that: admin permission requirement with the failure mode (Telegram refuses), and idempotent-ish partial update semantics where omitted fields are untouched. It does not describe the response payload, but that is minor for this tool.

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

Conciseness5/5

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

Four short sentences, front-loaded with what it changes, then permissions, then update semantics, then limits. Every sentence carries actionable information with no filler.

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?

Covers purpose, permissions, partial-update semantics, and field constraints, which is sufficient for a 3-parameter mutation with no output schema. Only the 'chat' identifier format (username vs numeric id) is unaddressed.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does: title bounded at 1-128 chars and about bounded at up to 255, matching the schema's minLength/maxLength. The 'chat' identifier parameter is left implicit, which is the only real gap.

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: 'Change a group/channel title and/or description.' This is clearly distinguishable from sibling mutations like telegram_set_chat_photo, telegram_edit_message, or telegram_update_profile, which target different resources.

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 clear context ('Needs admin rights; Telegram refuses otherwise') and states partial-update behavior ('Omit a field to leave it untouched'). It does not name an explicit alternative tool or a when-not-to-use condition, so it stops 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.

telegram_edit_messageEdit messageB

Edit one of your own messages in a chat by message id.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
textYes
messageIdYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, so the mutation nature is already known. The description adds the genuinely useful constraint that only your own messages can be edited, but says nothing about edit windows, error behavior, or whether non-text content can be edited.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. It is efficient, though its brevity is partly under-specification rather than disciplined economy.

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

Completeness2/5

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

For a mutation tool with no output schema, thin annotations, and zero schema-level parameter documentation, the description leaves too much open: no success/error semantics, no edit-eligibility rules, and no parameter format hints. An agent would need outside knowledge to call it reliably.

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

Parameters3/5

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

Schema description coverage is 0% for all three required parameters, so the description must compensate. "By message id" clarifies messageId and "in a chat" scopes chat, but the accepted chat identifier formats (id vs @username) and the 4096-character text limit documented in the schema are not surfaced here.

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?

States a specific verb and resource ("Edit ... messages") plus a scoping constraint ("one of your own") that separates it from send_message and delete_messages. It does not name siblings explicitly, but the operation is unmistakable.

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

Usage Guidelines2/5

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

No when-to-use guidance, no condition distinguishing editing from re-sending or deleting a message, and no mention of alternatives such as telegram_delete_messages or telegram_send_message. The only implied rule is message ownership.

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

telegram_export_historyExport chat history to a fileB

Dump a chat's message history to a JSON file in the export directory and return the path. Useful for archiving or handing a full conversation to another tool. Newest-first, max 1000.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
limitNo
formatNojson

TDQS

B3.4/5.0
Behavior4/5

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

Annotations cover only readOnlyHint=false and openWorldHint=true; the description supplies the extra behavior an agent needs: output lands in the export directory, the path is returned, results are newest-first, and there is a hard 1000-message ceiling. It does not say whether the file is overwritten on repeat calls or whether the export directory is configurable.

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

Conciseness4/5

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

Three short sentences, front-loaded with the action and destination, with no filler. The brevity is close to terse given three undocumented parameters, but every sentence earns its place.

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

Completeness3/5

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

No output schema exists, and the description correctly compensates by stating the return value (the file path). However, for a filesystem-writing tool it never explains the export directory location, overwrite behavior, or how the format enum affects the produced file, leaving gaps an agent would have to discover by trial.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden. It covers the limit cap ("max 1000") but omits the default of 200, says nothing about how to address the required chat parameter, and describes the output as "a JSON file" while the schema's format enum also permits jsonl and txt — effectively under-describing or mis-signalling that parameter.

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?

States a specific verb and resource: dump a chat's history to a JSON file and return the path. The file-export framing implicitly separates it from telegram_get_history and telegram_search_messages, though it never names those siblings explicitly, so the differentiation is left to inference.

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?

"Useful for archiving or handing a full conversation to another tool" gives a use context, but there is no when-not guidance and no named alternative (e.g., use telegram_get_history for inline reading, or telegram_search_messages for targeted lookup). Adequate but leaves the routing decision to the agent.

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

telegram_foldersList chat foldersA
Read-only

List the account's chat folders, with the peers each one includes and excludes. A folder with no explicit peers is rule-based (e.g. all non-contacts).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds real behavioral context beyond that: it explains the returned structure (peers included and excluded) and the important edge case that a folder with no explicit peers is rule-based, which affects how results should be interpreted.

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, no waste, with the core purpose front-loaded and the interpretive nuance placed second. 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?

With no output schema, the description usefully conveys the return structure and the rule-based case. It does not cover ordering, empty-folder handling, or whether counts are included, but for a zero-parameter read tool the coverage is close to complete.

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

Parameters4/5

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

The tool takes zero parameters, so the schema imposes no semantic burden. The description adds nothing about parameters because there are none to describe; baseline 4 applies.

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?

States a specific verb (List) and resource (the account's chat folders) and immediately clarifies what each entry contains (included/excluded peers). It is clearly distinct from siblings like telegram_list_chats, though it does not explicitly name any alternative.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus telegram_list_chats or the many other chat/messaging tools. The second sentence explains output interpretation, not when-to-invoke context, so an agent gets no routing help.

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

telegram_forward_messagesForward messagesB

Forward messages by id from one chat to another.

ParametersJSON Schema
NameRequiredDescriptionDefault
toChatYes
fromChatYes
messageIdsYes

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the agent knows this mutates state and can reach external chats. The description adds no further behavioral context such as whether source messages are preserved, permission requirements, or what happens with invalid ids.

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?

A single front-loaded sentence with no filler. Every word contributes to the action and scope, making it efficient for a simple forwarding tool.

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

Completeness3/5

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

The core operation is clear, but with no output schema, no parameter descriptions, and minimal annotations, the definition omits chat identifier formats, multiple-id semantics, and expected outcomes. It is adequate for a simple mutation but not fully complete.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It maps the concepts reasonably ('by id' for messageIds, 'from one chat to another' for fromChat/toChat) but does not explain accepted chat identifier formats or that messageIds is an array of positive integers.

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 states a specific verb and resource ('Forward messages') and clarifies the mechanism ('by id from one chat to another'). This clearly distinguishes it from send_message, edit_message, and delete_messages, though it does not explicitly name an alternative sibling.

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?

Forwarding existing messages by id implies the use case versus sending or editing, but the description gives no explicit when-to-use guidance, prerequisites, or exclusions. The intended action is inferable but not fully guided.

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

telegram_full_userFull user infoA
Read-only

Complete User object for one account (all non-secret fields Telegram exposes). Defaults to the authorized account; pass user to look at somebody else. Phone numbers of other people are only present when their privacy settings share them.

ParametersJSON Schema
NameRequiredDescriptionDefault
userNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds real value beyond them: it defines the field scope ('all non-secret fields') and explains why a field may be absent (phone numbers only appear when the other party's privacy settings share them), which prevents misreading a missing value as an error.

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 what is returned, then the default-vs-explicit parameter behavior, then the privacy caveat. No filler and nothing buried.

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 single-parameter read tool with no output schema, the description covers what is returned, the default target, and the main data-availability caveat. The remaining gap is the identifier format for 'user', which an agent needs in order to call it correctly on a non-default account.

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

Parameters3/5

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

Schema description coverage is 0% for the single 'user' parameter, so the description carries the burden. It adds the important default behavior (authorized account when omitted) but never specifies the accepted identifier format (username, ID, phone), leaving ambiguity given the sibling telegram_search_users.

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?

States a specific verb+resource: it returns the complete User object for one account, and clarifies scope ('all non-secret fields Telegram exposes'). It distinguishes itself from the default-account behavior of telegram_me by noting the authorized account is the default and another user can be targeted, though it never names telegram_me directly.

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?

Gives a conditional for the parameter ('pass user to look at somebody else') but never states when to prefer this over telegram_me, telegram_search_users, or telegram_get_contacts, all of which plausibly return overlapping user data. Usage is implied rather than routed.

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

telegram_get_contactsList contactsC
Read-only

List saved contacts (id, name, username, phone).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds the returned-field list but says nothing about pagination or ordering despite a limit parameter, and nothing about rate limits or how many contacts are typically returned. Beyond the annotations it contributes little behavioral context.

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

Conciseness4/5

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

One short sentence with the resource and return fields front-loaded; no filler or repetition. It is efficient, though arguably too terse to earn a 5 given the undocumented limit parameter.

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

Completeness3/5

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

No output schema exists, and the description usefully enumerates the returned fields, which is the main thing an agent needs. However, the limit parameter and pagination behavior are left unexplained, and with no annotations covering parameters, that gap leaves the definition only minimally complete.

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

Parameters2/5

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

Schema description coverage is 0% and the single parameter (limit, 1-1000, default 100) is undocumented in both schema and description. The description does not mention the limit or its pagination role, so it fails to compensate for the coverage gap.

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?

States a specific verb (List) and resource (saved contacts) plus the returned fields (id, name, username, phone), so the agent knows exactly what comes back. It is distinguishable from telegram_search_users, but the description never names that sibling or explicitly contrasts saved contacts with searched users.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites (e.g. logged-in session), and no alternative named. An agent choosing between this and telegram_search_users or telegram_list_blocked gets no routing help.

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

telegram_get_historyGet chat historyA
Read-only

Read recent messages from a chat. chat = @username, numeric id, or 'me'. Newest-first, max 100. The answer carries hasMore and nextOffsetId: pass that id back as offsetId to page further back. A page shorter than limit with hasMore:false means the history is exhausted.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
limitNo
offsetIdNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds real behavioral detail beyond that: newest-first ordering, a hard cap of 100, the hasMore/nextOffsetId paging contract, and the rule that a short page with hasMore:false means exhaustion. It omits rate limits and any auth/permission caveats, which keeps it from a 5.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the action and the identifier format, then paging mechanics, then the termination condition. No filler and no repetition of the title or name.

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?

There is no output schema, yet the description specifies the return contract an agent needs (hasMore, nextOffsetId, short-page-means-done). Combined with the 0% schema coverage on inputs, this covers everything required to call and iterate the tool correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the load and largely does: it defines accepted `chat` formats (@username, numeric id, 'me') and explains that `offsetId` is fed back from the previous response's nextOffsetId. The `limit` parameter's default and range are left to the schema, so a 4 rather than 5.

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?

States a specific verb and resource ("Read recent messages from a chat") and scopes it to recent history, which separates it from a full export. It does not name or differentiate against close siblings like telegram_search_messages, telegram_get_message, or telegram_export_history, so the agent must infer the boundary itself.

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?

Usage is implied rather than stated: the tool reads recent messages and can page backwards, which is enough to infer a bulk-recent-read use case. There is no explicit when-to-use vs. search_messages/export_history guidance and no prerequisites (e.g. needing a logged-in session or chat membership) called out.

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

telegram_get_messageGet single messageC
Read-only

Fetch one message by id from a chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
messageIdYes

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing further: it does not say what happens for a deleted or inaccessible message, whether the call affects read state, or what the response contains.

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

Conciseness4/5

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

One short, front-loaded sentence with no filler. It is efficient, though its brevity edges toward under-specification rather than tightness.

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

Completeness3/5

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

For a simple two-parameter read with annotations covering safety and no output schema, the minimum is present. However, with 0% parameter description coverage the agent is left guessing about chat identifier format and message id semantics, so it is only marginally complete.

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

Parameters2/5

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

Schema description coverage is 0% for both required parameters. The phrase 'by id from a chat' loosely maps to messageId and chat, but gives no format guidance (numeric id vs username vs t.me link, message id vs id within a chat), which is exactly the gap the description should fill at this coverage level.

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?

States a specific verb (fetch), resource (message), scope (one, by id) and source (a chat). This cleanly separates it from bulk siblings like telegram_get_history or telegram_search_messages, though it never names those alternatives.

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

Usage Guidelines2/5

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

No indication of when to prefer this over telegram_get_history, telegram_search_messages, telegram_pinned_messages, or telegram_search_global, and no prerequisites (e.g. must already know the message id) are stated. The agent must infer the use case from the name alone.

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

telegram_invite_membersAdd members to a group or channelA

Invite one or more users into a group/channel this account administers. Users are resolved from @username or id. Returns the ids Telegram reports as invited, plus the ones it refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
usersYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only tell the agent this is a write operation in an open world; the description adds the return contract (ids invited plus those refused), which is genuinely useful given there is no output schema. It still omits error/permission conditions such as privacy-restricted targets, existing members, or rate limits.

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, zero padding, and the scope/precondition is front-loaded before the identifier-resolution and return details. Every sentence earns its place.

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

Completeness4/5

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

For a two-parameter mutation tool with no output schema and minimal annotations, the description covers purpose, identifier formats, and the return shape. Missing only failure-mode detail (why a user would be 'refused') and permission nuance, which are secondary for correct invocation.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the load. It does clarify that 'users' accepts @username or numeric id, which is real added meaning, but says nothing about the 1–20 item bound or what identifier format 'chat' accepts.

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+resource ('invite one or more users into a group/channel') plus the governing scope condition ('this account administers'). That scope phrase implicitly separates it from telegram_join_chat (self-join), telegram_add_contact (contacts), and telegram_kick_member/promote_admin, so an agent can route correctly without opening schemas.

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 'group/channel this account administers' clause gives a clear precondition for use. It does not name an alternative tool or state when-not to use it (e.g. arriving via invite link versus direct add), so it stops short of explicit routing guidance.

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

telegram_join_chatJoin chatA

Join a public channel/group by @username or invite link.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false (a state-changing, non-reversible membership mutation) and openWorldHint=true, so the agent knows it touches the outside world. The description adds the 'public' restriction and input form but says nothing about failure behavior (invalid link, already joined, rate limits) or what the call returns.

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?

One short sentence with the verb front-loaded and the accepted input formats packed into the same clause. No redundancy or filler.

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

Completeness3/5

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

For a one-parameter mutation with no output schema, the definition covers the essentials but leaves out meaningfully relevant context: whether the join is idempotent, what happens on invalid/expired links, and whether a chat identifier is returned for follow-up calls.

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

Parameters4/5

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

Schema coverage is 0% and the single 'target' property is documented only as a bare string with minLength 1. The description compensates well by stating the accepted value forms ('@username or invite link'), which is exactly the semantic an agent needs to construct the argument.

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?

States a specific verb (join) and resource (public channel/group), and the qualifier 'public' plus '@username or invite link' distinguishes it meaningfully from telegram_leave_chat. It does not explicitly name a sibling to avoid, but the action is unambiguous.

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?

'by @username or invite link' implies the accepted inputs and the scope is limited to public channels/groups, which is useful context. However, it gives no exclusions (e.g., private groups requiring an invite, already-a-member cases) and does not point to any alternative tool.

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

telegram_kick_memberKick / ban / unban a memberB

Remove a member from a group or channel. kick=true bans them (default), unban=true lifts the ban so they may rejoin. Nothing is deleted from the chat history.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
userYes
unbanNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations only declare readOnlyHint=false and openWorldHint=true. The description adds useful context that history is preserved and explains ban vs unban reversibility. It omits the admin/permission requirement and any rate-limit or destructive-side-effect detail, so it is decent but incomplete for a mutation tool.

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

Conciseness4/5

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

Three tight sentences with the core action front-loaded and zero filler. The only minor flaw is the misleading 'kick=true' clause embedded in otherwise efficient prose.

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

Completeness3/5

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

For a mutation tool with no output schema and no annotation coverage of destructive behavior, the description covers the ban/unban semantics and history retention but omits permission requirements, self-kick restrictions, and confirmation/irreversibility details. Adequate but with clear gaps.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, and it only partially does: 'unban' is explained, but the description references a 'kick=true' parameter that does not exist in the schema, which will confuse an agent. 'chat' and 'user' are left to name inference alone.

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?

States a specific verb and resource: 'Remove a member from a group or channel,' which is clearly distinct from self-oriented siblings like telegram_leave_chat. It does not explicitly name or differentiate from other member-management tools such as telegram_block_user or telegram_promote_admin, keeping it at a 4.

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?

It clarifies the ban/unban choice in-line ('kick=true bans them (default), unban=true lifts the ban so they may rejoin'), which implies usage. However it never states when to prefer this over telegram_block_user or telegram_leave_chat, nor any prerequisites, so guidance is only implied.

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

telegram_leave_chatLeave chatA
Destructive

Leave a group/channel by id or @username.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered. The description adds the accepted identifier format but does not disclose consequences such as loss of membership or whether rejoin is required; with annotations carrying the main behavioral burden, a 3 is appropriate.

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 definition is a single front-loaded sentence with no filler. Every phrase contributes to identifying the action and accepted identifier.

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 one-parameter mutation whose safety semantics are covered by annotations and which has no output schema, the description is nearly complete. Minor omissions like confirmation behavior or post-leave effects keep it from a 5.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It does so by explaining that the sole required parameter 'chat' accepts an id or @username, which is meaningful beyond the raw schema type.

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 states a specific verb (Leave) and resource (group/channel) and clarifies the identifier may be an id or @username. It does not explicitly distinguish this from siblings like telegram_delete_chat or telegram_kick_member, so it falls short of a 5.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as telegram_delete_chat or telegram_join_chat, and no preconditions or exclusions are mentioned. The intended action is implied by the name and description, but usage guidance is absent.

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

telegram_list_blockedList blocked usersA
Read-only

List the users this account has blocked (id, name, username, blocked-at).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds value by enumerating the returned fields (id, name, username, blocked-at) in the absence of an output schema, but says nothing about pagination behavior, ordering, or the limit cap of 100.

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?

A single front-loaded sentence with no filler; the parenthetical return-field list earns its place because no output schema exists. Nothing could be removed without losing information.

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

Completeness4/5

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

For a simple read-only list tool with annotations covering safety, the description tells the agent what it does and what it returns. The only real gap is pagination/ordering semantics for limit and offset, which is minor but would matter for large block lists.

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

Parameters2/5

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

Schema description coverage is 0% for two parameters (limit, offset), so the description is expected to compensate and does not mention either. The schema's own defaults and bounds (max 100, min 1) provide structural hints, but paging semantics are undocumented anywhere.

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 a precisely scoped resource ('the users this account has blocked'), which is clearly distinct from siblings like telegram_block_user, telegram_get_contacts, and telegram_search_users. An agent can identify the tool's role 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 Guidelines2/5

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

No when-to-use guidance, no mention of the counterpart telegram_block_user for unblocking, and no statement of when this is preferable to telegram_get_contacts or telegram_search_users. The description offers no routing context at all.

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

telegram_list_chatsList chatsB
Read-only

List dialogs (DMs, groups, channels). Set includeAll=false to only return allowlisted chats when a policy is configured. Default returns everything the account can see.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
archivedNo
includeAllNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds a real behavioral trait beyond annotations: the allowlist/policy scoping and the fact that the default returns everything the account can see. It still says nothing about pagination, ordering, or why the limit caps at 500, so it is adequate rather than rich.

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

Conciseness4/5

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

Three tight sentences with the core resource definition front-loaded and the flag behavior following. No filler, though the last sentence slightly restates the includeAll default already implied by the second.

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

Completeness3/5

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

There is no output schema, and the description does not explain the return shape or pagination behavior; combined with the undocumented limit and archived parameters, an agent has enough to call the tool but not to call it optimally.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the parameter burden and only explains includeAll. The other two parameters, limit (default 50, max 500) and archived, get no semantic explanation anywhere, leaving meaningful gaps for an agent tuning the call.

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?

States a specific verb and resource ('List dialogs') and enumerates what counts as a dialog (DMs, groups, channels), so an agent knows exactly what is returned. It does not distinguish itself from siblings like telegram_common_chats or telegram_folders, but the core purpose is unambiguous.

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 does give conditional guidance for the includeAll flag ('Set includeAll=false to only return allowlisted chats when a policy is configured'), which is genuine when-to-use advice. However, it offers no guidance on choosing this tool over sibling listings such as telegram_common_chats or telegram_search_users.

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

telegram_list_downloadsList downloadsB
Read-only

List files downloaded by this server (paths, sizes, source message).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description usefully discloses the return payload (paths, sizes, source message), which matters since there is no output schema, but it says nothing about result volume, ordering, or how the implicit limit interacts with the listing.

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

Conciseness4/5

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

A single front-loaded sentence that names the resource first and parenthesizes the returned fields, with no filler. It is efficient, though very terse given the tool's one undocumented parameter.

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

Completeness3/5

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

With no output schema, the description appropriately enumerates the returned fields, which is the most valuable part. However it omits pagination/limit behavior and any hint about where downloads are scoped, leaving gaps an agent would need before calling it confidently.

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

Parameters2/5

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

There is a single 'limit' parameter with 0% schema description coverage; the schema only supplies defaults and bounds (1-500, default 50). The description never mentions limit, so it adds no meaning about what is being limited or what happens when more downloads exist than the cap.

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?

States a specific verb+resource ('List files downloaded by this server') and names the returned fields, which separates it from telegram_download_media (which fetches) and telegram_delete_download. It does not explicitly name those siblings, so an agent must infer the distinction from the 'downloaded by this server' scoping.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as telegram_download_media or telegram_delete_download. The scope phrase 'downloaded by this server' implies it is an inventory of prior downloads, but the agent gets no explicit routing signal.

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

telegram_list_sessionsList active sessionsA
Read-only

List every device currently logged into this account, marking the one running this server with current:true. Each entry carries the hash that telegram_logout_session needs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description earns credit for disclosing output content beyond annotations: the current:true marker and the presence of a session hash, which tells the agent what it gets back and what it can chain into.

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 with no filler. The scoping statement comes first and the downstream-consumer hint follows, which is the right order for an agent scanning for relevance.

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

Completeness4/5

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

For a zero-parameter read tool with no output schema, the description supplies the key return semantics (per-device entries, current marker, hash). Ordering or pagination behavior is not mentioned, but that is a minor gap given the tool's simplicity.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. There is nothing for the description to clarify about inputs, and it correctly omits parameter discussion.

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 (logged-in devices/sessions) with added scope detail: every device, with the current one flagged current:true. It also distinguishes itself from the adjacent telegram_logout_session tool by naming what that tool consumes.

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 establishes the workflow context by noting each entry carries the hash that telegram_logout_session needs, which tells the agent to call this before logging a session out. It gives no explicit exclusions or alternate listing tools, so it stops 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.

telegram_login_cancelCancel a pending loginA

Abandon an in-progress login. No code or password is retained after this.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is largely covered. The description adds genuine behavioral value beyond that: it discloses the security-relevant fact that no code or password is retained afterward, which an agent cannot infer from the structured fields. It stops short of saying what happens if no login is pending.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core action front-loaded ahead of the state-cleanup note. Every clause 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 zero-parameter, no-output-schema mutation tool, the description covers the action and the post-condition. It is essentially complete, missing only edge-case behavior such as what occurs when no login is actually in progress.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. Schema coverage is 100% and there is nothing for the description to document on the input side.

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 ('abandon') and a specific resource ('an in-progress login'), which is clearly distinct from its flow siblings telegram_login_start, telegram_login_code, and telegram_login_password. An agent can tell this is the abort step of the login flow 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?

Phrasing 'in-progress login' implies the tool applies only while a login is pending, but the description never states when to reach for this versus completing the flow or restarting. No exclusions or alternative routing are provided.

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

telegram_login_codeSubmit the Telegram login codeA

Finish login by submitting the code Telegram sent the user. Call telegram_login_start first. If the account has 2FA, this returns needsPassword:true and you must ask the user for their 2FA password, then call telegram_login_password. Never echo the code or password back.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe code the user typed, digits only.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only cover the generic safety profile (readOnlyHint=false, openWorldHint=true). The description adds real behavioral detail: the return flag needsPassword:true signals a 2FA branch, the required follow-up call, and a security constraint ('Never echo the code or password back'). This goes well beyond the structured data.

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?

Four short sentences, all front-loaded: purpose, prerequisite, conditional branch, and security rule. 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?

Given a single required parameter, no output schema, and generic annotations, the description supplies everything an agent needs: the prerequisite call, the conditional 2FA handoff, and the secrecy requirement. Nothing material 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% and the code param is fully documented ('digits only'), so the schema does the heavy lifting. The description only restates that it is the code Telegram sent, adding no format or validation detail 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 and resource ('Finish login by submitting the code Telegram sent the user') and clearly distinguishes itself from the login siblings (start, password, cancel). An agent can identify this as the code-submission step without inspecting any 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 names the prerequisite ('Call telegram_login_start first') and the conditional branch: if 2FA is active, ask the user for the password and call telegram_login_password. This routes the agent to the correct alternative under a stated condition.

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

telegram_login_passwordSubmit the Telegram 2FA passwordA

Complete login when the account has two-step verification enabled. Only call after telegram_login_code returned passwordRequired:true. The password is used once and never stored.

ParametersJSON Schema
NameRequiredDescriptionDefault
passwordYesThe user's Telegram two-step verification password.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true. The description adds meaningful context that the password is used once and never stored, which is important for handling sensitive credentials, though it does not discuss failure handling for an incorrect password.

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 three short sentences: it front-loads the purpose, states the prerequisite, and adds only one important security fact. There is no redundant or filler text.

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

Completeness4/5

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

Given the single required parameter, complete schema coverage, and existing annotations, the description provides enough context for safe invocation. It could optionally mention what happens after an incorrect password, but that is not essential for this narrowly scoped login step.

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 password parameter is already documented in the input schema. The description adds security context about the password's lifecycle but no additional format, validation, or semantic detail beyond the schema.

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

Purpose5/5

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

The description states a specific action (complete login) and resource (Telegram two-step verification password), and distinguishes this tool from telegram_login_code by requiring its passwordRequired:true result. An agent can identify its role in the login flow without opening sibling 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?

It explicitly says to call only after telegram_login_code returned passwordRequired:true, giving a clear prerequisite and preventing premature invocation. This is a precise condition that routes the agent correctly within the login-flow siblings.

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

telegram_login_startStart Telegram loginA

Begin authorization when no session exists. Sends the login code to the user's Telegram app. Pass phone in international format (+15551234567) unless TELEGRAM_PHONE is set in the environment. After calling this, ask the user to read the code Telegram just sent them and call telegram_login_code. NEVER ask the user to paste the code anywhere except this chat, and never repeat it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoReplace an existing working session with a fresh one. Only when the user asks.
phoneNoInternational phone number with leading +, e.g. +15551234567

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the description is not carrying the safety profile alone. It nonetheless adds real behavioral context: the tool sends a code to the user's Telegram app, honors the TELEGRAM_PHONE env fallback, and enforces a security rule about never echoing the code. Return format is not covered, but with annotations present this is solid.

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

Conciseness5/5

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

Front-loaded with the trigger condition and effect, then the required input format, then the mandatory follow-up and security constraint. Every sentence carries actionable information with no padding.

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 two-parameter, no-output-schema tool, the description covers the precondition, the side effect, input formatting with env fallback, the next step, and a security constraint. Nothing needed to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description earns a bump by adding the TELEGRAM_PHONE environment fallback for phone, which is not visible in the schema. The force parameter's 'only when the user asks' guidance duplicates the schema description rather than extending it.

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

Purpose5/5

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

States a specific verb and resource ('Begin authorization') with the triggering condition ('when no session exists') and the concrete effect ('Sends the login code to the user's Telegram app'). It clearly differentiates itself from the sibling telegram_login_code, which is named as the follow-up step.

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 an explicit precondition ('when no session exists') and routes the agent to the correct next tool ('call telegram_login_code'), plus the phone-vs-env behavior. It does not explicitly say what to do if a session already exists (e.g. use telegram_status), so it stops just short of full when/when-not guidance.

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

telegram_logout_sessionLog out another sessionA
Destructive

Revoke one session by the hash reported by telegram_list_sessions. Pass all=true to revoke every session except this one. Refuses to revoke the session running this server.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNo
hashNo

TDQS

A4.4/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, so the safety profile is covered. The description adds genuinely non-obvious behavior: the bulk all=true mode, and the guardrail that it refuses to revoke the server's own session. It does not say whether revocation is reversible or requires re-authentication on the other device.

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, each carrying distinct information, with the primary action stated first and the guardrail last. No filler.

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 two-parameter mutation with no output schema, the description covers the action, the parameter sources, the bulk mode, and the safety refusal. Only irreversibility and the result of a partial failure are left unstated.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the burden and does explain both parameters: hash identifies one session and originates from telegram_list_sessions, while all=true revokes everything except the current session. It does not clarify the hash format or the interaction when both are supplied, which is a minor gap.

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 (revoke) and resource (session), and immediately distinguishes itself from telegram_list_sessions by naming it as the source of the hash. The all=true variant and the self-session refusal make the scope 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?

Explicitly routes the agent: get the hash from telegram_list_sessions, or pass all=true for a bulk revoke. It also states the one case where the tool will not act (the session running this server). It lacks a broader 'do not use this when...' framing, but the key selection logic is present.

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

telegram_mark_readMark chat readC

Mark all messages in a chat as read.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes

TDQS

C2.8/5.0
Behavior2/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, so the safety profile is partly covered. The description adds nothing beyond the one-liner: it doesn't say whether the operation is idempotent, whether it affects the peer's read receipt, or whether it must be authorized for that chat.

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?

One short, front-loaded sentence with no filler. Nothing redundant or padded.

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

Completeness2/5

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

A state-mutating tool with no output schema and an undocumented required parameter needs more than one sentence. Key facts an agent needs — identifier format, permission requirements, scope of 'all messages' — are absent.

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

Parameters2/5

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

Schema coverage is 0% for the single 'chat' parameter, so the description carries the burden. Saying 'in a chat' only weakly implies the parameter identifies the target chat; it gives no accepted identifier format (username, id, phone) or meaning beyond that.

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?

States a specific verb+resource ('Mark all messages in a chat as read'), which is unambiguous about the operation. It does not differentiate from siblings that also touch read state implicitly (e.g., telegram_get_history), but the action itself is crisp.

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

Usage Guidelines2/5

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

No when-to-use context, no prerequisites, and no named alternatives. An agent gets no guidance on when marking a chat read is appropriate versus simply fetching history, which also often marks messages read.

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

telegram_meMy profileA
Read-only

Full profile of the authorized account (id, names, username, phone, premium).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the field list (id, names, username, phone, premium), which is useful output context, but says nothing about auth prerequisites or failure behavior for an unauthenticated session.

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?

One sentence, front-loaded with the subject ('Full profile of the authorized account') and a compact parenthetical of return fields. Nothing is wasted and nothing is buried.

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

Completeness4/5

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

With no output schema, the description compensates by enumerating the returned fields, and with no parameters there is no invocation ambiguity. Only the omission of auth context keeps it from being fully complete.

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

Parameters4/5

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

Zero parameters, and the schema has no properties, so there is nothing for the description to clarify. Baseline 4 applies; the parenthetical field list is a small bonus rather than parameter information.

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?

States a concrete resource and scope: the full profile of the authorized account, with the returned fields enumerated. It implicitly distinguishes itself from telegram_full_user (other users) via 'authorized account' and from telegram_update_profile via the read-only framing, but never names those siblings explicitly.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance. The agent has to infer that this is for the caller's own profile versus telegram_full_user for another user, or telegram_status for connection state; no alternative is mentioned.

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

telegram_mute_chatMute / unmute chatA

Mute a chat for N days (0 = unmute). Uses default mute behaviour when days>0.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
daysNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare destructive/mutating behavior (readOnlyHint=false) and open-world reach, so the safety profile is covered. The description adds the days=0 unmute semantics and notes a default mute behaviour, but "default mute behaviour" is left undefined and no auth or return behavior is given.

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, front-loaded with the action and duration, with the unmute case stated immediately after. No wasted words.

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

Completeness3/5

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

For a simple 2-param mutation tool with no output schema and annotations covering safety, the description is nearly adequate. The remaining gaps are the undefined "default mute behaviour" and the unspecified format of the `chat` argument.

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

Parameters3/5

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

Schema coverage is 0%, so the schema supplies only types/default/range with no prose. The description meaningfully defines days (N days, 0=unmute), which is real added value, but it says nothing about the required `chat` parameter (ID vs. username format), leaving half the parameters undocumented.

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 ("Mute") plus resource ("a chat") and a duration parameter, and explicitly folds the inverse operation ("0 = unmute") into the purpose. An agent can distinguish this from siblings like telegram_archive_chat or telegram_pin_chat without opening any 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?

It tells the agent that days=0 unmutes, which is useful within-tool routing, but gives no guidance on when to choose this over alternatives or on prerequisites/context. Usage is implied rather than stated.

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

telegram_pin_chatPin / unpin a chat in the dialog listA

Pin or unpin a chat in your own dialog list (not a message — use telegram_pin_message for that). Local to the account: nothing changes for other members.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
pinnedNo

TDQS

A4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and openWorldHint=false, so the description carries the substantive burden and delivers: it discloses that the effect is account-local and invisible to other members. It does not state permission requirements or reversibility, but the scope disclosure is the key behavioral fact an agent needs.

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 with the core action and the sibling exclusion front-loaded, and zero filler. Every clause carries information.

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

Completeness3/5

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

For a small mutation tool with no output schema the description covers scope well, but with 0% parameter coverage it leaves the chat identifier and the pinned toggle undocumented, which is a meaningful gap for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the schema documents neither parameter, and the description does not compensate. It never explains the 'chat' identifier format (id vs username) or that 'pinned' is a boolean defaulting to true controlling the toggle direction.

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 (pin/unpin) and resource (a chat in the dialog list), and explicitly disambiguates from the message-pinning sibling telegram_pin_message. An agent can distinguish this from telegram_pin_message and telegram_unpin_all without opening any 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?

Explicitly names the condition that routes elsewhere ('not a message — use telegram_pin_message for that'), which is a real when-not plus the alternative. It does not, however, address the nearby telegram_unpin_all sibling or when to prefer this over bulk unpinning.

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

telegram_pin_messagePin / unpin messageC

Pin or unpin a message in a chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
unpinNo
notifyNo
messageIdYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the write nature is known; the description adds essentially nothing beyond that. It omits whether pinning notifies chat members, whether it replaces or accumulates with existing pins, and what permissions are required for a chat-wide mutation.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or redundancy. It is appropriately sized for what it conveys, though that size is also a symptom of its thinness rather than a virtue of economy.

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

Completeness2/5

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

For a 4-parameter mutation tool with zero schema descriptions, no output schema, and only minimal annotations, this description is not sufficient. Key operational details (notify behavior, pin limits, permission requirements) are entirely absent.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden and fails to compensate. It implies the unpin toggle but says nothing about 'notify' (presumably controlling member notification) or the format expected for 'chat' and 'messageId'.

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 states a specific verb pair (pin/unpin) and resource (a message in a chat), which is clearer than the name alone and readable without opening the schema. It does not differentiate from closely related siblings like telegram_unpin_all or telegram_pin_chat, but the action itself is unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to pin versus unpin, nor any mention of the sibling telegram_unpin_all that also removes pins. An agent gets no routing information and must infer everything from the boolean flag.

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

telegram_pinned_messagesList pinned messagesB
Read-only

Read the messages currently pinned in a chat, with sender and text.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
limitNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description usefully adds that results include sender and text, but says nothing about ordering, pagination behavior despite a limit parameter, or whether it caps at Telegram's pin limit.

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?

A single front-loaded sentence with the verb and resource first and the return content second. No filler or redundancy.

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

Completeness3/5

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

With no output schema, the description partially compensates by naming the returned fields (sender, text). However, it omits chat identifier format, pagination/limit semantics, and result ordering, which an agent needs to call it correctly on a chat with many pins.

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

Parameters2/5

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

Schema coverage is 0%, so the description must carry parameter meaning and it largely does not. It implies a chat target and mentions returned fields, but never explains the accepted chat identifier format or the limit parameter's role and default.

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?

States a specific verb (read) and resource (pinned messages) and even hints at the return payload (sender and text), which clearly separates it from pin_message, unpin_all, and get_history siblings. It stops short of naming an alternative, but the resource is unambiguous.

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

Usage Guidelines2/5

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

No when-to-use guidance at all. With siblings like telegram_get_history, telegram_search_messages, and telegram_get_message, an agent gets no cue about when pinned-message listing is the right choice versus general history retrieval, and no prerequisites are mentioned.

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

telegram_promote_adminPromote / demote an adminB

Grant or revoke admin rights for a member. preset: 'moderator' (default, can delete and ban), 'full' (everything except anonymous), 'none' (demote). Optional custom title (rank).

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
rankNo
userYes
presetNomoderator

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already establish that this is not read-only and is open-world. The description adds useful behavioral detail about what 'moderator', 'full', and 'none' do, but it omits important operational context such as required permissions, whether changes are immediately effective, and any irreversible or sensitive effects.

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

Conciseness5/5

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

Two sentences, front-loaded with the tool's action and followed by essential preset semantics. There is no wasted text.

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

Completeness2/5

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

For a four-parameter admin mutation with no output schema and minimal annotations, the description leaves significant gaps: required chat/user semantics are undocumented, and permission prerequisites or failure conditions are not described. It covers preset behavior well but is not complete enough for safe invocation by an agent unfamiliar with Telegram identifiers.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It explains the preset enum values and describes rank as an optional custom title, but it does not explain the required chat and user parameters or their expected identifier formats.

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 states a specific verb and resource: granting or revoking admin rights for a member, and the preset 'none' makes demotion explicit. It is clear but does not contrast itself with adjacent tools such as telegram_kick_member or telegram_chat_admins.

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

Usage Guidelines4/5

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

It gives clear context for when to use the tool: granting or revoking admin rights. The preset explanations also clarify the intended effect of each mode, though it does not state prerequisites such as requiring the caller to be an owner/admin or name alternatives.

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

telegram_reactReact to a messageA

Send a reaction (emoji) to a specific message. Pass emoji 'none' or '' to clear reactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
emojiNo👍
messageIdYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations (readOnlyHint=false, openWorldHint=true) already signal a mutating, network-facing operation. The description adds one genuine behavioral fact beyond that: how to clear a reaction. It does not disclose whether a new reaction replaces an existing one (Telegram allows only one per user per message), nor any permission or failure 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?

Two short sentences, front-loaded with the core action and followed by the edge-case instruction. Every clause carries information and there is no filler.

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

Completeness3/5

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

With no output schema, the description need not explain return values, and the annotations cover the safety profile. However, for a mutating tool the description omits replace-vs-accumulate semantics, permission requirements, and chat identifier format, leaving real gaps for a 3-parameter tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the parameter burden. It usefully documents the clearing semantics of the emoji parameter, but says nothing about the accepted format of 'chat' (id vs username) or 'messageId', leaving two of three parameters undocumented anywhere.

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?

States a specific verb (send) and resource (reaction/emoji) bound to a specific message, which is clearly distinct from the send_message, edit_message and forward_messages siblings. It does not explicitly contrast itself with any sibling, so it falls just short of the top band.

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 a conditional instruction for clearing reactions ('none' or ''), which is useful usage guidance, but offers no when-to-use vs when-not-to-use context or prerequisites (e.g. required permissions, whether the chat must be joined). Usage is only implied by the tool name and purpose.

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

telegram_scheduled_messagesList scheduled messagesA
Read-only

List the messages queued to be sent later in a chat, with their planned send time. Scheduling is done by the client; this reads back what is already queued.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
limitNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds real value beyond them by clarifying that scheduling happens client-side and this tool only reads back what is queued, preventing the agent from assuming it can schedule. It stops short of describing pagination or the return shape.

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, front-loaded with what the tool returns and followed by the key behavioral clarification. No filler.

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

Completeness3/5

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

For a simple read-only list tool with annotations and no output schema, the description conveys what is returned and the read-only nature. However, with 0% schema coverage the parameters remain undocumented, leaving a real gap for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0% for two parameters. The description only implicitly references the required 'chat' via 'in a chat' and never explains its accepted format (id, username, etc.), and 'limit' is not mentioned at all, so it fails to compensate for the coverage gap.

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?

States a specific verb (List) and resource (messages queued to be sent later), scoped to a chat and including the planned send time. The purpose is unambiguous and no sibling tool covers scheduled messages, though it doesn't explicitly contrast itself with any sibling.

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?

Usage is only implied: an agent can infer you call this to inspect queued messages, but there is no when-to-use statement, no exclusions, and no named alternative (e.g., send_message for actually queuing). The second sentence clarifies behavior rather than selection guidance.

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

telegram_search_globalSearch across every chatA
Read-only

Full-text search over all chats at once (not one chat). Returns matches with the chat they belong to, newest first. Optional minDate/maxDate (unix seconds) narrow the window. Note: Telegram's own cursor can repeat rows between pages; that overlap is removed for you and reported as skippedRepeat.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
maxDateNo
minDateNo
offsetIdNo
offsetRateNo

TDQS

A4/5.0
Behavior4/5

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

With readOnlyHint and openWorldHint already supplied, the description adds useful behavioral details: matches include their owning chat, results are newest first, date filters use unix seconds, and Telegram cursor overlap is removed and reported as skippedRepeat. These are real operational traits 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?

Four tightly packed sentences: scope first, then return behavior, then date filtering, then the pagination caveat. No filler and the important distinctions are front-loaded.

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

Completeness3/5

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

For a search tool with no output schema and annotations covering safety, the description usefully explains ordering, ownership, and deduplication. But the pagination parameters remain unexplained, leaving a gap in how an agent should page through results correctly.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, but it only clarifies minDate/maxDate as unix-second window bounds. The query format, limit behavior, and especially offsetId/offsetRate pagination semantics are left entirely undocumented.

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

Purpose5/5

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

The description states a specific verb and resource: 'Full-text search over all chats at once'. It explicitly distinguishes this from a single-chat search with '(not one chat)', which is exactly the boundary an agent needs against sibling telegram_search_messages.

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 clearly establishes the global-search context and implicitly contrasts with per-chat search via '(not one chat)'. However, it does not name telegram_search_messages as the alternative, so the routing guidance is strong but not fully explicit.

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

telegram_search_messagesSearch messagesA
Read-only

Full-text search within a chat. Returns matching messages newest-first (max 100 per page). The answer carries hasMore and nextOffsetId for paging deeper into the matches.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
limitNo
queryYes
offsetIdNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint and openWorldHint, so safety is covered; the description adds genuinely new behavior: newest-first ordering, a 100-per-page cap, and the hasMore/nextOffsetId paging contract. Since there is no output schema, disclosing the return fields is valuable rather than redundant.

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 tight sentences with zero filler; the search scope is front-loaded and pagination details follow in dependency order. Every sentence carries distinct information.

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

Completeness3/5

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

For a 4-parameter search tool with no output schema and no annotations about returns, the description covers the response contract well but leaves the two required parameters' expected formats unspecified. Adequate but with a clear gap an agent would have to guess past.

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

Parameters2/5

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

Schema description coverage is 0% for 4 parameters, and the description never explains what 'chat' accepts (username, id, link?) or what 'query' matches. It only alludes to the max-100 limit and the offsetId paging cursor, leaving chat/query/limit semantics undocumented.

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 states a specific verb and resource ('Full-text search within a chat') and scopes it to a single chat, which implicitly separates it from telegram_search_global. It stops short of naming the sibling, so the differentiation is inferred rather than explicit.

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?

Usage context is only implied by 'within a chat' – an agent can infer this is the in-chat variant versus the global search, but no condition or alternative tool is named. No guidance on prerequisites or when a history listing would be preferable.

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

telegram_search_usersSearch usersB
Read-only

Global search for users/chats by name or @username. Returns ids, usernames, types.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety and network scope are covered. The description adds the return shape ('ids, usernames, types'), which is valuable given there is no output schema, but it says nothing about result ranking, partial matching, or the meaning of the limit bound.

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

Conciseness5/5

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

Two short, front-loaded sentences with zero filler; the search scope and accepted keys come first, followed by the return shape.

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

Completeness4/5

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

For a simple two-parameter read tool with annotations covering safety and a stated return shape, this is nearly complete. The remaining gap is limit behavior and any note on match semantics, both minor.

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

Parameters3/5

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

Schema description coverage is 0% with 2 parameters, so the description must compensate. It clarifies that 'query' accepts a name or an @username, which is genuinely useful, but it says nothing about the 'limit' parameter's default or maximum.

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?

States a specific verb and resource ('Global search for users/chats') plus the search keys (name or @username). It is distinguishable from telegram_search_messages, though it does not explicitly differentiate itself from the similarly named telegram_search_global.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no alternative named. The word 'Global' implies scope, but the agent is left to infer that this is the right tool for resolving a user into an id before calling tools like telegram_full_user.

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

telegram_send_contactSend a contact cardA

Send a phone contact (vCard) into a chat. Nothing is saved to your contacts list.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
phoneYes
lastNameNo
firstNameYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the agent knows this is a non-read-only, external-facing action. The description adds a useful side-effect clarification (no contact is saved), but does not cover other behavioral details such as authentication needs, rate limits, or what exactly is written to the chat.

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

Conciseness5/5

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

Two short sentences, front-loaded with the core action, and no wasted words. The second sentence adds important behavioral context without bloating the definition.

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

Completeness2/5

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

For a tool with four undocumented parameters and no output schema, the description is too thin. It does not give the agent enough information to correctly supply required values (e.g., chat identifier format, phone format), leaving critical invocation details to guesswork.

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

Parameters2/5

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

Schema description coverage is 0% across four parameters. The description vaguely mentions 'phone contact' and 'into a chat,' which loosely map to phone and chat, but it does not explain firstName/lastName requirements, phone format, or what values the chat parameter accepts. It does not compensate for the missing schema documentation.

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 ('Send') and resource ('phone contact (vCard)') with scope ('into a chat'), and distinguishes itself from contact-saving siblings by noting 'Nothing is saved to your contacts list.' An agent can tell it apart from send_message and add_contact without opening schemas.

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?

Provides implicit context (send a contact card) and a negative guideline ('Nothing is saved to your contacts list'), which helps exclude use for saving contacts. However, it does not explicitly name an alternative or state a positive when-to-use condition, leaving the agent to infer the choice from the description alone.

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

telegram_send_fileSend a fileB

Send a local file as a document (forceDocument) or auto-detected media. Supports caption. Sends immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
captionNo
replyToNo
filePathYes
forceDocumentNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false (a write) and openWorldHint=true, so safety is partly covered. The description usefully adds that the send is immediate (not scheduled) and that captioning is supported, but it doesn't explain the forceDocument default behavior's consequences or permission requirements.

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

Conciseness4/5

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

Three terse sentences with zero filler, and the core action is front-loaded. It is efficiently sized for a simple send operation.

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

Completeness2/5

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

With 5 parameters at 0% schema coverage and no output schema, the description is too thin. It omits semantics for replyTo and chat/filePath and gives no sense of what a successful send returns or how failures manifest.

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

Parameters2/5

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

Schema coverage is 0% across 5 parameters, so the description carries the burden but only partially delivers. It explains forceDocument (document vs auto-detected media) and caption, but leaves chat, filePath, and especially replyTo entirely undocumented.

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 names a specific verb+resource ('Send a local file') and clarifies the two modes of operation ('as a document (forceDocument) or auto-detected media'). This implicitly distinguishes it from siblings like telegram_send_photo and telegram_send_message, though it never names them explicitly.

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

Usage Guidelines3/5

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

It hints at when the tool applies ('local file', 'auto-detected media') and that it 'Sends immediately', implying no scheduling. However, it gives no explicit when-to-use guidance versus telegram_send_photo or telegram_send_message, leaving the agent to infer the boundary.

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

telegram_send_locationSend a locationB

Send a geographic point to a chat. lat/long are decimal degrees; optional accuracy in metres. Sends immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
chatYes
longYes
replyToNo
accuracyNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare this as a write operation (readOnlyHint=false) reaching outside the system (openWorldHint=true). The description adds that delivery is immediate, implying no scheduling or draft state, but says nothing about permission requirements, rate limits, or failure modes for an invalid chat. That is a modest but real addition 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, zero filler, with the core action front-loaded and unit clarifications following. Nothing could be cut without losing information.

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

Completeness3/5

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

For a simple five-parameter mutation with no output schema, the description covers the action, coordinate units, and immediacy. It still leaves the chat identifier format and replyTo semantics unexplained, which are gaps an agent would need to guess at.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden and partially meets it: it clarifies units for lat/long (decimal degrees) and accuracy (metres), which the schema only bounds numerically. However, the required 'chat' parameter's accepted format (ID vs username vs phone) and the meaning of 'replyTo' are left completely undefined.

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?

States a specific verb and resource ('Send a geographic point to a chat'), which clearly separates it from siblings like telegram_send_contact or telegram_send_photo. It does not explicitly name an alternative, but the resource is unambiguous enough that an agent can route correctly.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no note on prerequisites (e.g. membership in the target chat), and no comparison to alternatives such as telegram_send_contact or telegram_send_message with a map link. 'Sends immediately' is the only contextual cue and it is not framed as usage guidance.

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

telegram_send_messageSend messageB

Send a text message to a chat. Supports replyTo and topicId. Returns the new message id and sent:true. Full access: sends immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
textYes
silentNo
replyToNo
topicIdNo

TDQS

B3.2/5.0
Behavior4/5

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

With readOnlyHint=false and openWorldHint=true already covering the safety profile, the description usefully adds that the send is immediate (no confirmation/draft step) and discloses the return shape (new message id plus sent:true) in the absence of an output schema. It stops short of stating auth requirements or rate limits, so it is not a 5.

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

Conciseness4/5

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

Four short, front-loaded sentences with no filler; the core purpose leads and optional/return details follow. Trimmed slightly by 'Full access: sends immediately' being vague rather than informative, but overall efficient.

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

Completeness3/5

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

For a mutation tool with no output schema, the description covers the send semantics and return value, which is the main thing an agent needs. However, it omits chat addressing (username vs numeric id), the silent flag's behavior, and any auth/permission context—gaps that matter for a 5-parameter write tool.

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

Parameters2/5

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

Schema description coverage is 0% across 5 parameters, so the schema contributes nothing and the description names only replyTo and topicId with no semantics (format, expected values, effect). The required chat and text params and the silent flag are entirely unexplained, leaving the agent to infer chat addressing format and silent behavior.

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?

States a specific verb+resource (send text message to a chat), which distinguishes it from the many send_* siblings like send_file, send_photo, and send_poll that target non-text payloads. It never explicitly names those alternatives, but the 'text message' qualifier carries the differentiation on its own.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of when to prefer telegram_send_file or telegram_send_photo over this tool. The 'Full access: sends immediately' line hints at a mode but doesn't state conditions for use.

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

telegram_send_photoSend a photoC

Send a local image as a photo (inline preview). Sends immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
captionNo
filePathYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations only declare readOnlyHint=false and openWorldHint=true, so the description must carry the rest. It adds the useful behavioral fact that the send is immediate (no queue/scheduling) and that it renders as an inline preview, but omits size limits, auth requirements, and failure behavior for a write operation.

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

Conciseness4/5

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

Two short sentences with the action front-loaded and no wasted words. It is efficient, though the extreme brevity borders on under-specification rather than tight writing.

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

Completeness2/5

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

This is a mutating, open-world tool with no output schema, minimal annotations, and zero parameter documentation. The description supplies no return behavior, no target-format guidance, and no limits, so an agent lacks enough to call it reliably.

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

Parameters2/5

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

Schema description coverage is 0% across three parameters. 'Send a local image' weakly implies filePath is a local filesystem path, but 'chat' (target identifier format) and 'caption' (1024-char limit, optional) receive no clarification in either the schema or the description.

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 states a specific verb and resource ('Send a local image as a photo') and clarifies the rendering mode ('inline preview'), which distinguishes it from a generic file upload. However, it never names the closest sibling, telegram_send_file, so the agent must infer the photo-vs-document distinction.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance. 'Sends immediately' hints that this bypasses scheduling, but the description never tells the agent how to choose between this, telegram_send_file, or telegram_send_message.

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

telegram_send_pollSend a pollA

Send a poll. 2-10 answers. multipleChoice lets voters pick several; quiz makes it a quiz (a correct answer index is required, 0-based). anonymous=false shows who voted.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
quizNo
answersYes
questionYes
anonymousNo
correctAnswerNo
multipleChoiceNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare this is a write/open-world operation, so the safety profile is covered. The description usefully adds that quiz requires a correct answer index and that anonymous=false reveals voters, which are behavioral traits beyond the annotations, but it omits delivery, error, or permission context for sending into a chat.

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?

Four tight sentences with zero filler, and the core constraint (2-10 answers) is front-loaded. Every clause earns its place by clarifying a parameter behavior.

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 write tool with no output schema and annotations covering the safety profile, the description supplies the key param interactions an agent needs to call it correctly. Only minor gaps remain around the chat target and error behavior.

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

Parameters4/5

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

With 0% schema description coverage, the description carries the full parameter burden, and it explains the non-obvious interactions: multipleChoice allows several picks, quiz demands a 0-based correctAnswer, anonymous=false exposes voters, and answers is bounded 2-10. It leaves chat, question length, and answer max length undocumented, but nails the tricky cross-parameter semantics.

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?

States a specific verb (Send) and resource (a poll), enough for an agent to distinguish it from telegram_send_message without opening a schema. It does not name the sibling it overrides, so it stops short of a 5.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance and no mention of alternatives like telegram_send_message. The description explains what the poll tool accepts, not the conditions that should route an agent here.

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

telegram_set_chat_photoSet or remove a chat photoA

Upload a local image as the group/channel photo, or remove the photo with remove=true. Needs admin rights. The file is read from disk, never from a URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
removeNo
filePathNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the mutation/external nature is known. The description adds genuinely useful context beyond the annotations: admin-rights prerequisite and the important constraint that the file is read from disk and never from a URL. It omits return/confirmation behavior, 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 with no waste; the set/remove duality and the hard constraints (admin rights, local file) are 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 3-param mutation tool with no output schema, the description covers the mutation mode, permissions, and input source well. Minor gaps remain, such as image format/size limits or success confirmation, so it is strong but not exhaustive.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It explains remove=true (deletion switch) and that filePath is a local disk path rather than a URL, covering two of three params meaningfully; 'chat' is only implied by the noun 'group/channel'.

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+resource ('upload a local image as the group/channel photo', or remove with remove=true) and clearly scopes it to group/channel chats, which implicitly separates it from the sibling telegram_set_my_photo (own profile). An agent can tell what it does 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 Guidelines4/5

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

Gives the key usage conditions: remove=true selects deletion mode, and admin rights are required. It does not explicitly name a sibling alternative to route to, so it falls short of 5, but the when-to-use context is clear.

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

telegram_set_my_photoSet or remove your profile photoA

Upload a local image as your own profile photo, or remove the current one with remove=true. Telegram also keeps the previous photo in your photo list; this does not delete it.

ParametersJSON Schema
NameRequiredDescriptionDefault
removeNo
filePathNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, so the mutation/network nature is already known; the description adds real value by disclosing that the previous photo persists in the photo list and is not deleted. It omits other behavioral traits such as supported formats, size limits, or what happens if filePath and remove are both supplied.

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

Conciseness5/5

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

Two short sentences with the primary action front-loaded and the caveat second; every clause carries information the agent needs and nothing is padded.

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

Completeness4/5

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

With no output schema and only two parameters, the description covers both inputs plus one important side effect. It is nearly complete; a note on file format/size and mutual exclusivity of remove and filePath would close the remaining gap.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the burden and does add meaning: filePath is clarified as a *local* image path (not a URL or file_id), and remove is tied to the removal action. Missing are constraints such as accepted file types and precedence when both parameters are present.

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?

States a specific verb+resource ('Upload a local image as your own profile photo') and covers the inverse operation (remove=true), which is clear enough to separate it from telegram_set_chat_photo. It stops short of naming that sibling explicitly, so the differentiation is inferable rather than stated.

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 two modes (upload vs. remove=true) are spelled out, which is useful in-mode guidance. There is no guidance on when to prefer this over telegram_update_profile or telegram_user_photos, and no prerequisites (e.g., must be logged in, file format limits) are given.

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

telegram_setupWrite the Telegram credentials fileA

Create or update the .env file this server loads: TELEGRAM_API_ID, TELEGRAM_API_HASH, optional TELEGRAM_PHONE, and TELEGRAM_ALLOW_ALL_CHATS. Get api_id/api_hash from https://my.telegram.org/apps. Never call this with a hash the user pasted in chat unless they asked you to; the hash is written to disk and never returned. Existing other keys in .env are preserved. The MCP server must be restarted to pick up new values.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiIdNoNumeric App api_id from my.telegram.org/apps, e.g. "1234567".
forceNoRewrite an already-configured .env. Only when the user asks.
phoneNoInternational phone number with leading +, e.g. +15551234567.
apiHashNoApp api_hash from my.telegram.org/apps (32 hex chars).
allowAllChatsNoFull access to every chat the account can reach. true unless the user wants a restriction.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations confirm this is a non-read-only write, and the description adds important behavior beyond them: credentials are written to disk, the hash is never returned, unrelated `.env` keys are preserved, and the server must restart. These are exactly the side effects an agent needs to know.

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?

Four compact sentences, front-loaded with the action and key list, followed by credential source, safety warning, preservation behavior, and restart requirement. No wasted text.

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 secret-writing configuration tool with no output schema, the description covers what is written, where to get values, secret-handling constraints, preservation of other keys, and restart semantics. An agent has enough to call it correctly and safely.

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 five parameters are already documented in the schema. The description maps them to environment keys and adds the credential source, but adds limited syntax or meaning beyond the schema's own parameter descriptions.

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+resource: create or update the `.env` credentials file the server loads. It names the exact credential keys and makes clear this is bootstrap/configuration work, distinguishing it from runtime Telegram sibling tools.

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?

Explains where to obtain api_id/api_hash and gives a clear safety rule: never call with a hash pasted in chat unless explicitly requested. It also notes the server restart requirement. It does not explicitly discuss alternatives such as status/doctor tools, but setup has no true sibling alternative.

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

telegram_statusTelegram statusA
Read-only

Connection + authorization status, and the logged-in account summary. Secrets are never returned.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful disclosure beyond that — 'Secrets are never returned' — but says nothing about auth requirements, whether a network round trip is required, or what happens when not logged in.

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

Conciseness5/5

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

Two short sentences, front-loaded with the primary purpose and closed with the privacy guarantee. 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?

With no output schema, the description carries the return-value burden and does sketch the payload at a high level (connection status, auth status, account summary) plus a privacy guarantee. It is adequate for a simple zero-arg status call, though more detail on what the 'account summary' contains would help.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool applies.

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 names a specific resource (connection + authorization status) and adds the logged-in account summary, so an agent knows roughly what it returns. It does not, however, distinguish itself from nearby siblings like telegram_me or telegram_doctor, which plausibly overlap with 'account summary' and 'status/diagnostic' respectively.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no exclusions, and no mention of alternatives such as telegram_me or telegram_login_start. With five-plus status/auth-related siblings, an agent gets no routing signal from this text.

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

telegram_translateTranslate a message or a stringA
Read-only

Translate text using Telegram's own translation service. Pass chat+messageId to translate an existing message, or text to translate a literal string. targetLang is an ISO code such as 'id' or 'en'.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatNo
textNo
messageIdNo
targetLangNoen

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 and openWorldHint=true, so the safety profile is covered. The description adds useful context that translation is delegated to Telegram's own service, but says nothing about failure modes, unsupported-language behavior, or whether the source language is auto-detected.

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, no filler, with the primary purpose front-loaded and the two invocation modes immediately after. Every clause carries information an agent needs.

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

Completeness4/5

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

For a simple read-only tool with no output schema, this covers purpose, both call paths, and the language parameter adequately. The remaining gaps (neither-mode behavior, unknown source language handling) are minor for an operation of this complexity.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the param burden and does it well: it explains that chat and messageId combine, text is the literal-string alternative, and targetLang is an ISO code with examples ('id', 'en'). It does not clarify the mutual exclusivity or the length constraints from 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 (Translate) and resource (text/message) and names the backing service (Telegram's own translation service). No sibling tool does translation, and the two operating modes are spelled out so an agent can immediately tell what this does.

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

Usage Guidelines4/5

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

Explicitly routes the caller: 'chat+messageId to translate an existing message, or text to translate a literal string.' This is clear conditional guidance for both modes. It stops short of stating what happens if both/neither are supplied, so it is not fully exhaustive.

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

telegram_typingShow or clear the typing indicatorA

Show 'typing…' in a chat for a few seconds, or clear it. Telegram expires the indicator on its own; pass action 'cancel' to remove it immediately. Nothing is sent to the chat history.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
actionNotyping
topicIdNo

TDQS

A3.5/5.0
Behavior4/5

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

With readOnlyHint=false and openWorldHint=true already declared, the description adds useful behavioral context: the indicator auto-expires, action 'cancel' removes it immediately, and nothing is sent to chat history. It does not cover auth or rate limits, but the added side-effect detail is valuable.

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 action is front-loaded, followed by useful expiry and side-effect details, and every sentence earns its place.

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

Completeness3/5

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

The description covers the tool's purpose and action behavior, and there is no output schema to explain. But for a tool with three parameters and zero schema descriptions, it omits important details about chat format and topicId, leaving an agent to infer required parameter formats.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for three parameters. It clarifies action semantics ('cancel' removes immediately; default shows typing), but provides no explanation for the required chat parameter or the optional topicId parameter, leaving two of three parameters undocumented.

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 states a specific verb and resource: showing or clearing the typing indicator in a chat. It is clear what the tool does, but it does not explicitly distinguish itself from any sibling tool, which the rubric reserves for a 5.

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?

It explains the two action values and notes that Telegram expires the indicator automatically, giving implied usage context. However, it does not state when to use this tool versus alternatives such as send_message, nor does it provide exclusions.

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

telegram_unpin_allUnpin every messageB

Remove all pinned messages from a chat in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the agent knows this is a mutation affecting external state. The description adds the specific effect (removing all pinned messages) but doesn't mention required permissions, reversibility, or other behavioral details.

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?

A single, front-loaded sentence with zero waste. It efficiently conveys the core action and scope.

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

Completeness3/5

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

For a simple mutation tool with one parameter and some annotation coverage, the description covers the basic action but leaves gaps in parameter format and operational details like permissions or side effects. It is minimally adequate.

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

Parameters2/5

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

Schema description coverage is 0% and the description only says 'from a chat' without explaining the 'chat' parameter's format (e.g., username, ID, or link). It fails to compensate for the lack of schema documentation.

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 states a specific verb 'Remove all pinned messages' and resource 'from a chat', making the tool's effect clear. It distinguishes itself from single-message pinning siblings like telegram_pin_message, though it doesn't explicitly name alternatives.

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

Usage Guidelines3/5

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

The phrase 'in one call' implies this is a batch operation, hinting at when to use it over unpinning individually. However, it does not explicitly state when to use this versus alternatives or any prerequisites.

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

telegram_update_profileUpdate my profileB

Change first/last name and/or bio of the authorized account.

ParametersJSON Schema
NameRequiredDescriptionDefault
aboutNo
lastNameNo
firstNameNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false (mutation) and openWorldHint=true, and the description confirms the target is the authorized account, adding the mutation scope. However, it does not state what happens to fields not provided, whether changes are reversible, or any permission/rate considerations.

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?

A single efficient sentence with the action and the mutable fields front-loaded, no wasted words.

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

Completeness3/5

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

For a simple three-optional-param mutation with no output schema, the description covers the essentials, but with no annotations carrying behavioral detail and zero schema descriptions, more context on side effects and field handling would help.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate, and it does partially by mapping firstName/lastName to 'first/last name' and about to 'bio' and signaling all are optional via 'and/or'. It omits the 70-char limit on about and any format constraints beyond the schema.

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?

States a specific verb (Change) and resource (first/last name and/or bio of the authorized account), making the write operation clear. It distinguishes itself from read siblings like telegram_me or telegram_full_user implicitly, but never names them.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance. The phrase 'authorized account' hints at context, but the description offers no comparison to alternatives or prerequisites for calling it.

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

telegram_user_photosList a user's profile photosA
Read-only

List the profile photos of a user (or of 'me'). Returns photo ids with their sizes and a downloadable file reference; use telegram_download_media only for chat messages, not for these.

ParametersJSON Schema
NameRequiredDescriptionDefault
userNome
limitNo
offsetNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly and openWorld, so the bar is lower, and the description adds real value by describing the return payload (photo ids, sizes, a downloadable file reference). It doesn't cover ordering, freshness, or privacy/visibility restrictions, so not a 5.

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

Conciseness5/5

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

Two tight sentences: the purpose first, then the return shape and the sibling-routing caveat. No redundancy.

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

Completeness3/5

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

No output schema exists, and the description does cover the returned fields, which is good. However, with three undescribed parameters including pagination controls, an agent still lacks enough information to page through results correctly.

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

Parameters2/5

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

Schema description coverage is 0% across three parameters, and the description only hints that 'user' accepts 'me'. The meaning of 'limit' and 'offset' and their pagination behavior are left entirely undocumented in both schema and description.

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

Purpose5/5

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

States a specific verb and resource ('List the profile photos of a user') and clarifies the 'me' self-target case. It is clearly distinct from siblings like telegram_set_my_photo or telegram_set_chat_photo, which write rather than read.

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 routes the agent away from telegram_download_media for these items ('use telegram_download_media only for chat messages, not for these'). It doesn't spell out when to prefer telegram_full_user over this, but the boundary with the download sibling is stated.

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. 69 tool updatesv1.0.0
    • First observedtelegram_add_contact
    • First observedtelegram_archive_chat
    • First observedtelegram_audit_log
    • First observedtelegram_audit_summary
    • First observedtelegram_block_user
    • First observedtelegram_chat_admins
    • First observedtelegram_chat_info
    • First observedtelegram_chat_members
    • First observedtelegram_clear_history
    • First observedtelegram_common_chats
    • First observedtelegram_create_channel
    • First observedtelegram_create_group
    • First observedtelegram_delete_chat
    • First observedtelegram_delete_contacts
    • First observedtelegram_delete_download
    • First observedtelegram_delete_messages
    • First observedtelegram_doctor
    • First observedtelegram_download_media
    • First observedtelegram_edit_chat
    • First observedtelegram_edit_message
    • First observedtelegram_export_history
    • First observedtelegram_export_invite_link
    • First observedtelegram_folders
    • First observedtelegram_forward_messages
    • First observedtelegram_full_user
    • First observedtelegram_get_contacts
    • First observedtelegram_get_history
    • First observedtelegram_get_message
    • First observedtelegram_invite_members
    • First observedtelegram_join_chat
    • First observedtelegram_kick_member
    • First observedtelegram_leave_chat
    • First observedtelegram_list_blocked
    • First observedtelegram_list_chats
    • First observedtelegram_list_downloads
    • First observedtelegram_list_sessions
    • First observedtelegram_login_cancel
    • First observedtelegram_login_code
    • First observedtelegram_login_password
    • First observedtelegram_login_start
    • First observedtelegram_logout_session
    • First observedtelegram_mark_read
    • First observedtelegram_me
    • First observedtelegram_message_link
    • First observedtelegram_mute_chat
    • First observedtelegram_pin_chat
    • First observedtelegram_pin_message
    • First observedtelegram_pinned_messages
    • First observedtelegram_promote_admin
    • First observedtelegram_react
    • First observedtelegram_scheduled_messages
    • First observedtelegram_search_global
    • First observedtelegram_search_messages
    • First observedtelegram_search_users
    • First observedtelegram_send_contact
    • First observedtelegram_send_file
    • First observedtelegram_send_location
    • First observedtelegram_send_message
    • First observedtelegram_send_photo
    • First observedtelegram_send_poll
    • First observedtelegram_set_chat_photo
    • First observedtelegram_set_my_photo
    • First observedtelegram_setup
    • First observedtelegram_status
    • First observedtelegram_translate
    • First observedtelegram_typing
    • First observedtelegram_unpin_all
    • First observedtelegram_update_profile
    • First observedtelegram_user_photos

TDQS

B3.3/5.0

Scored across 69 tools

Disambiguation4/5

Most tools target a clearly distinct resource+action, and the descriptions do real disambiguation work (pin_chat vs pin_message, leave_chat vs delete_chat, search_messages vs search_global, get_history vs export_history). A few boundaries stay fuzzy: telegram_me vs telegram_full_user vs telegram_status overlap as account summaries, and telegram_delete_messages vs telegram_clear_history both remove messages (by id vs whole chat).

Naming Consistency4/5

Nearly everything is telegram_ + snake_case verb_noun (send_message, get_history, create_group, kick_member), which is highly predictable. Minor deviation: listing tools mix list_ prefix (telegram_list_chats, telegram_list_blocked, telegram_list_downloads) with bare nouns (telegram_folders, telegram_chat_members, telegram_scheduled_messages, telegram_chat_admins).

Tool Count2/5

69 tools is far beyond what an agent can reliably choose among, and the surface is heavy relative even to Telegram's broad domain. Many tools are niche (audit_summary, delete_download, message_link, typing) and could be folded or grouped. This is a large, sprawling set rather than a well-scoped one.

Completeness4/5

Coverage is unusually thorough: auth lifecycle, profile, chats/groups/channels, messaging, media, contacts, admin rights, sessions, polls, locations, folders, and audit logging are all present. Minor gaps remain — telegram_scheduled_messages only reads queued messages (no way to schedule one), and folders are list-only with no create/update, but these are edge cases agents can work around.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Connects AI agents to Telegram via the official TDLib library, enabling tools like getting user info, listing dialogs, and searching messages.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Drives a personal Telegram account from the terminal or via MCP, enabling AI assistants to list chats, send/edit messages, fetch history, manage groups, and more with tiered read/write/destructive permissions.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to operate a Telegram account through the same commands as the terminal client: messaging, chat management, voice transcription, calls, stickers, and privacy settings.
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables users to interact with their own Telegram account through MTProto, supporting chat listing, message reading and searching, sending messages, and fetching contacts via MCP tools.
    -