Skip to main content
Glama
ivantelix

Telegram MCP Server

by ivantelix

โœˆ๏ธ Telegram MCP Server

License: MIT Python Version MCP Protocol Code Style: Ruff

A generic, production-ready Model Context Protocol (MCP) server for the Telegram Bot API.

This server allows AI assistants (such as Claude Desktop, Antigravity IDE, Cursor, Continue, or any custom MCP client) to interact directly with Telegram: sending formatted messages, uploading files and images, administering chats, broadcasting alerts, and reading incoming messages.


โœจ Features

  • ๐Ÿ’ฌ Messaging: Send text with rich formatting (HTML, MarkdownV2, Markdown), silent delivery, link preview toggles, and reply chaining.

  • ๐Ÿ–ผ๏ธ Media & File Uploads: Send photos, documents (PDF, zip, code), audio tracks, and voice notes (.ogg) from either local file paths or remote URLs.

  • ๐Ÿ“Š Polls & Locations: Create native polls (anonymous/multiple answers) and send geographic coordinates.

  • ๐Ÿ‘ฅ Chat & Channel Management: Inspect chat info, member counts, administrator lists, pin/unpin messages, and delete messages.

  • ๐Ÿ“ฅ Incoming Updates: Read incoming messages and user interactions with polling.

  • ๐Ÿ›ก๏ธ Zero Token Risk: Built on the official Telegram Bot API (no phone numbers or user sessions required).

  • ๐ŸŒ Self-Hosted API Support: Compatible with self-hosted Telegram Local Bot API servers (to support files up to 2,000 MB).

  • ๐Ÿงฉ MCP Resources & Prompts: Includes status inspection resources and pre-configured prompt templates for alerts and summaries.


Related MCP server: Telegram Bot MCP Server

๐Ÿ› ๏ธ Available MCP Tools

Tool

Description

Key Parameters

telegram_get_me

Check bot identity, username, and token validity

None

telegram_send_message

Send formatted text message to user/group/channel

text, chat_id (opt), parse_mode, reply_to_message_id

telegram_send_photo

Send photo via local path or URL

photo, caption, chat_id (opt)

telegram_send_document

Send document/file (PDF, code, zip)

document, caption, chat_id (opt)

telegram_send_audio

Send audio track with title and performer

audio, title, performer, caption

telegram_send_voice

Send voice note (.ogg OPUS)

voice, caption, chat_id (opt)

telegram_send_location

Send geographic map coordinates

latitude, longitude, chat_id (opt)

telegram_send_poll

Create a native Telegram poll

question, options, is_anonymous

telegram_forward_message

Forward a message between chats

from_chat_id, message_id, chat_id (opt)

telegram_get_chat

Inspect user/group/channel metadata

chat_id (opt)

telegram_get_chat_member_count

Get total member count

chat_id (opt)

telegram_get_chat_administrators

Get list of admins in a chat

chat_id (opt)

telegram_pin_chat_message

Pin a message in a chat

message_id, chat_id (opt)

telegram_unpin_chat_message

Unpin one or all messages

message_id (opt), chat_id (opt)

telegram_delete_message

Delete a message from a chat

message_id, chat_id (opt)

telegram_get_updates

Poll incoming updates and messages

offset, limit, timeout

๐Ÿ’ก Tip: If TELEGRAM_DEFAULT_CHAT_ID is set in your environment, all tools can be called without supplying chat_id.


๐Ÿš€ Quick Start

1. Prerequisites

  1. Open Telegram and message @BotFather.

  2. Run /newbot and follow instructions to get your Bot Token (e.g. 123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ).

  3. (Optional) Get your Chat ID by messaging @userinfobot or your bot, and save your chat ID.

2. Installation

Clone this repository:

git clone https://github.com/your-username/telegram-mcp.git
cd telegram-mcp

Option A: Using Python Virtual Environment (Standard)

python3 -m venv .venv
source .venv/bin/activate
pip install -e .

Copy and edit configuration:

cp .env.example .env
# Edit .env with your TELEGRAM_BOT_TOKEN and optional TELEGRAM_DEFAULT_CHAT_ID

Test that the server runs:

telegram-mcp --help

Option B: Using Docker

# Copy and configure your environment
cp .env.example .env

# Build and run
docker compose up -d

โš™๏ธ Configuration

Set these environment variables in .env or in your MCP client configuration:

Variable

Required

Default

Description

TELEGRAM_BOT_TOKEN

Yes

-

Bot token from @BotFather

TELEGRAM_DEFAULT_CHAT_ID

No

""

Default chat ID to use if omitted in tool calls

TELEGRAM_DEFAULT_PARSE_MODE

No

"HTML"

Default parse mode: HTML, MarkdownV2, Markdown

TELEGRAM_API_BASE_URL

No

"https://api.telegram.org"

Custom Telegram Bot API URL for self-hosted instances

TELEGRAM_REQUEST_TIMEOUT

No

30.0

Timeout in seconds for HTTP requests

LOG_LEVEL

No

"INFO"

Logging level (DEBUG, INFO, WARNING, ERROR)


๐Ÿ”Œ Connecting to MCP Clients

Claude Desktop

Edit your claude_desktop_config.json:

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

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

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

{
  "mcpServers": {
    "telegram": {
      "command": "/absolute/path/to/telegram-mcp/.venv/bin/python",
      "args": [
        "-m",
        "telegram_mcp"
      ],
      "env": {
        "TELEGRAM_BOT_TOKEN": "YOUR_BOT_TOKEN_HERE",
        "TELEGRAM_DEFAULT_CHAT_ID": "YOUR_CHAT_ID_HERE"
      }
    }
  }
}

Antigravity IDE

Add to your ~/.gemini/config/mcp_config.json:

{
  "mcpServers": {
    "telegram": {
      "command": "/absolute/path/to/telegram-mcp/.venv/bin/python",
      "args": [
        "-m",
        "telegram_mcp"
      ],
      "env": {
        "TELEGRAM_BOT_TOKEN": "YOUR_BOT_TOKEN_HERE",
        "TELEGRAM_DEFAULT_CHAT_ID": "YOUR_CHAT_ID_HERE"
      }
    }
  }
}

Cursor

In .cursor/mcp.json or Cursor Settings -> MCP Servers:

{
  "mcpServers": {
    "telegram": {
      "command": "/absolute/path/to/telegram-mcp/.venv/bin/python",
      "args": ["-m", "telegram_mcp"],
      "env": {
        "TELEGRAM_BOT_TOKEN": "YOUR_BOT_TOKEN_HERE"
      }
    }
  }
}

๐Ÿงช Development & Testing

Run tests with pytest:

# Run test suite
pytest -v

# Run linting check
ruff check .

# Fix auto-fixable lint issues
ruff check --fix .

๐Ÿค Contributing

Contributions are welcome! Feel free to:

  1. Fork the repository.

  2. Create a feature branch (git checkout -b feature/amazing-feature).

  3. Commit your changes (git commit -m 'Add amazing feature').

  4. Push to the branch (git push origin feature/amazing-feature).

  5. Open a Pull Request.


๐Ÿ“„ License

This project is licensed under the MIT License.

Available Tools

16 tools
telegram_delete_messageB

Delete a message from a chat.

:param message_id: Identifier of the message to delete. :param chat_id: Target chat identifier. :return: Status string indicating success.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idNo
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It implies a destructive operation but does not disclose permanence, permission requirements, or limitations. It also fails to mention that deletion may be irreversible or subject to Telegram's API restrictions. The return value is only vaguely stated as a status string.

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 concise and front-loaded with the action. It includes parameter documentation in a structured format (param/return), which is efficient. Every sentence serves a purpose, though the content is minimal.

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?

The description is not complete for an agent to use correctly. It lacks critical context for a deletion operation: whether the user can delete any message or only their own, whether deletion is permanent, any rate limits, and the exact meaning of the return status. The optional chat_id is not explained, and no constraints are mentioned. The output schema exists but the description does not elaborate on the status string beyond 'indicating success.'

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

Parameters3/5

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

The schema has no descriptions for the parameters (coverage 0%), so the description must provide meaning. It does give brief descriptions: 'Identifier of the message to delete' and 'Target chat identifier.' This adds basic clarity but lacks detail such as the optionality of chat_id or default behavior, which is only inferable 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?

The description clearly states the action: 'Delete a message from a chat.' The verb 'delete' and resource 'message from a chat' are specific and unambiguous. It distinguishes from siblings like pin/unpin and send operations, which have different purposes.

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 alternatives. The description does not mention any conditions, prerequisites, or exclusions (e.g., can only delete own messages, or messages within a time limit). It simply states the action without context.

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

telegram_forward_messageA

Forward an existing message of any type from one chat to another.

:param from_chat_id: Unique identifier for chat where original message was sent. :param message_id: Message identifier in the chat specified in from_chat_id. :param chat_id: Destination chat identifier. Defaults to TELEGRAM_DEFAULT_CHAT_ID. :param disable_notification: Forward message silently. :return: JSON formatted forwarded Message object.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idNo
message_idYes
from_chat_idYes
disable_notificationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It adds useful details: any message type can be forwarded, chat_id defaults to TELEGRAM_DEFAULT_CHAT_ID, disable_notification controls silent delivery, and the return is a Message object. However, it does not disclose permissions, whether the source message remains unchanged, or failure modes such as protected content restrictions.

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 purpose statement is front-loaded and every subsequent line earns its place by documenting a parameter or the return value. There is no filler, repetition of schema types, or misleading verbosity, making it easy for an agent to scan.

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 4-parameter tool with an output schema, the description is functionally complete: all parameters are documented, the default destination behavior is explicit, and the return type is stated. It falls short of 5 only because it lacks alternative-routing guidance and does not mention edge-case constraints such as chat access requirements or forwarding limits.

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

Parameters5/5

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

Schema description coverage is 0%, and the description compensates fully by explaining every parameter in plain language: from_chat_id identifies the source chat, message_id targets the message there, chat_id is the destination with a documented default, and disable_notification means silent forwarding. This adds real meaning beyond the raw schema field names.

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

Purpose5/5

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

The opening sentence 'Forward an existing message of any type from one chat to another' names a specific verb and resource, and the 'existing message' qualifier clearly distinguishes it from sibling send_* tools that create new messages. This prevents an agent from confusing forwarding with sending, editing, or deleting.

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 clearly states what the tool does but does not explicitly contrast it with alternatives like telegram_send_message or mention edge cases where forwarding would be inappropriate, such as protected messages or invalid chat access. The usage context is implied by the verb 'forward', but explicit when/when-not guidance is missing.

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

telegram_get_chatB

Get detailed information about a chat (private user, group, supergroup, or channel). Returns title, username, description, invite link, active photo, etc.

:param chat_id: Unique identifier for target chat or @channelusername. :return: JSON formatted Telegram Chat object.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It mentions the return format, but does not disclose authorization requirements, possible errors, rate limits, or that the bot may need to be a member of the chat. The read-only nature is only implied by the verb 'Get'.

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

Conciseness5/5

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

The description is concise and front-loaded: the main purpose is stated first, followed by a compact return summary and parameter documentation. No filler or redundant sentences are present.

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 tool is simple, has one parameter, and an output schema exists, so the description is mostly adequate. However, it omits sibling-tool selection guidance, the practical requirement that chat_id must actually be provided despite the schema default, and behavioral details such as permissions and error conditions.

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%, and the description compensates by explaining chat_id as a 'Unique identifier for target chat or @channelusername'. This adds meaningful format guidance beyond the bare schema, though it does not clarify why chat_id is optional in the schema or what happens if it is null.

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

Purpose4/5

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

The description clearly states the verb and resource: 'Get detailed information about a chat', and enumerates chat types and returned fields. It is distinguishable from send/delete siblings, but it does not explicitly differentiate from the sibling getter tools like telegram_get_chat_member_count or telegram_get_chat_administrators.

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 provides no guidance on when to use this tool versus the sibling getters. There is no mention of when to choose get_chat over get_chat_member_count or get_chat_administrators, nor any exclusions or prerequisites.

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

telegram_get_chat_administratorsB

Get a list of administrators in a chat/group/channel.

:param chat_id: Target chat identifier. :return: JSON formatted list of ChatMember objects representing administrators.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It mentions the return format (JSON list of ChatMember objects), but does not state whether the operation is read-only, what permissions are required, or how it behaves for invalid or null chat_id. This is a significant gap for an endpoint with no structured metadata.

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 extremely concise: two sentences plus a parameter doc line. It front-loads the purpose and includes no filler. Every line earns its place, making it easy for an agent to quickly parse.

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 one optional parameter and an output schema, the description leaves out critical context: whether chat_id can be omitted, required administrative permissions, and how the returned list is structured beyond 'JSON list'. This is insufficient for reliable agent invocation, especially without annotations.

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 provides a minimal semantic for chat_id ('Target chat identifier') which adds some meaning, but it does not explain the parameter's optionality (default null), accepted value formats, or what happens when omitted. It is adequate but far from comprehensive.

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

Purpose5/5

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

The description clearly states a specific verb and resource: 'Get a list of administrators in a chat/group/channel.' It distinguishes itself from siblings like get_chat and get_chat_member_count by targeting administrators specifically, covering multiple chat types.

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 is provided on when to use this tool versus alternatives. There is no mention of prerequisites (e.g., bot must be admin), no exclusions, and no naming of sibling tools that might be more appropriate in other contexts. 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_get_chat_member_countB

Get the total number of members in a group, supergroup, or channel.

:param chat_id: Target chat identifier. :return: Member count integer formatted as string.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It does state the return format ('Member count integer formatted as string') and implies a read-only operation, but it does not mention error cases, permissions, or behavior when chat_id is null/default. This is minimal but not completely opaque.

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 short and front-loaded with the core purpose, followed by compact param/return documentation. Each sentence contributes useful information, though the param line adds little beyond the schema field name.

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 tool is simple with one parameter and an output schema, so the description does not need to explain return structure in detail. However, it lacks usage guidance, sibling differentiation, and any caveats about chat_id being optional/nullable, leaving some ambiguity for an agent deciding how to invoke it 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 compensate for the schema's lack of parameter documentation. It only restates the parameter name ('Target chat identifier') without adding format details, examples, or clarifying the default null behavior. The meaning is essentially the same as the schema's 'Chat Id' title.

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

Purpose4/5

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

The description clearly identifies the action ('Get the total number of members') and the resource ('a group, supergroup, or channel'). It does not explicitly distinguish itself from siblings like telegram_get_chat, but the purpose is specific enough for an agent to understand what it does.

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 provides no guidance on when to use this tool versus alternatives such as telegram_get_chat or telegram_get_chat_administrators. It only states the operation and parameters, leaving selection criteria entirely to inference.

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

telegram_get_meA

Get current bot identity and configuration status. Tests bot token validity and returns bot id, username, first name, and permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations available, the description carries the burden of explaining behavior. It accurately frames the operation as a read-only retrieval and token validity test, and it states what is returned. It does not explicitly say 'no side effects,' but the use of 'Get' and 'Tests' makes the non-mutating nature clear.

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

Conciseness5/5

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

The description is two sentences with no filler. It front-loads the action and resource, then immediately adds the token validation purpose and the returned fields, making every sentence earn its place.

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

Completeness5/5

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

Given there are no parameters camiseta an output schema exists, the description covers what an agent needs to decide whether to invoke this tool. It explains the identity retrieval, the validation behavior, and the specific data returned, so nothing essential 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?

The input schema has zero parameters locked in properties, so there is no parameter ambiguity to resolve. The description adds useful context about what the call returns, fulfilling the baseline expected for a parameterless tool.

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

Purpose5/5

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

The description clearly identifies the tool as retrieving the current bot identity and configuration status, with a specific verb ('Get') and resource. It also enumerates the returned fields (bot id, username, first name, permissions), which differentiates it from the message- and chat-focused 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?

The description provides a clear use case: test bot token validity and retrieve identity information. It does not explicitly name alternatives or exclusions, but since no sibling tool overlaps with this purpose, the usage context is sufficient.

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

telegram_get_updatesA

Retrieve incoming updates (messages, reactions, etc.) sent to the bot. Useful to read incoming user messages or inspect user/group chat IDs.

:param offset: Identifier of the first update to be returned. :param limit: Limits the number of updates to be retrieved (1-100, default 10). :param timeout: Timeout in seconds for short/long polling (0 for immediate response). :return: JSON array of Telegram Update objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral burden. It discloses that this is a retrieval operation, explains short/long polling via the timeout parameter, and states the return format. It does not describe Telegram-specific details like offset-confirmed consumption or webhook conflicts, but the core read/polling behavior is transparent enough for correct invocation.

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: a clear purpose sentence, a useful use-case sentence, then structured parameter and return documentation. There is no filler, and every section adds value beyond the raw schema.

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?

All three parameters are documented, the return type is described, and the intended use cases are clear, so an agent can call the tool successfully with sensible defaults or custom arguments. The only notable omission is advanced Telegram behavior such as using offset to acknowledge processed updates, but that is a minor gap for a tool with no required parameters.

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

Parameters5/5

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

The input schema has 0% description coverage, so the description must fully compensate. It defines offset as the identifier of the first update, gives the valid range and default for limit, and explains timeout in terms of short/long polling with the special meaning of 0. This is exactly the parameter-level guidance an agent needs.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Retrieve incoming updates... sent to the bot', and includes examples ('messages, reactions') and explicit use cases ('read incoming user messages or inspect user/group chat IDs'). This clearly distinguishes it from the sibling tools, which send messages, pin/delete messages, or fetch known chats/bot info.

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

Usage Guidelines4/5

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

The description explicitly states when to use this tool: to read incoming user messages or inspect user/group chat IDs. It does not mention explicit alternatives or when-not-to-use conditions, but no sibling tool overlaps with this polling/receiving role, so the 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_pin_chat_messageA

Pin a message in a group, supergroup, or channel.

:param message_id: Identifier of a message to pin. :param chat_id: Target chat identifier. :param disable_notification: Pin silently without notifying chat members. :return: Status string indicating success.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idNo
message_idYes
disable_notificationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the mutating effect ('Pin a message'), the eligible chat contexts, and the success return ('Status string indicating success'), but it does not mention failure modes, bot permission requirements, or the consequences of pinning over an existing pinned message.

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?

Concept and scope are front-loaded in the first sentence, followed by compact parameter notes and a return note. There is 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?

All three parameters are described and the output schema covers the return type, so the basic call shape is complete. However, for a mutating Telegram tool the description omits the bot's required administrator/pin permission and what happens when chat_id is omitted or null, leaving an agent to discover these from errors.

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 is the only source of parameter meaning. It explains all three parameters, and 'Pin silently without notifying chat members' adds real semantics to disable_notification. The chat_id line is generic ('Target chat identifier') and does not clarify the null/default behavior, but it still identifies the role of the parameter.

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

Purpose5/5

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

The first sentence states a specific verb ('Pin') and resource ('a message') with an explicit scope ('in a group, supergroup, or channel'). This clearly distinguishes it from siblings such as telegram_unpin_chat_message and telegram_send_message without ambiguity.

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 sentence about groups, supergroups, or channels gives an implicit usage condition, but it does not state when to prefer this tool over siblings, exclude private chats, or mention required permissions. Usage guidance is therefore implied rather than explicit.

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

telegram_send_audioA

Send an audio file (.mp3, .m4a, etc.) to a chat.

:param audio: Local file path on disk or HTTP/HTTPS URL. :param caption: Audio caption. :param title: Track name. :param performer: Performer / artist name. :param chat_id: Target chat identifier. :param parse_mode: Caption parse mode. :param disable_notification: Send silently. :return: JSON formatted Telegram Message object.

ParametersJSON Schema
NameRequiredDescriptionDefault
audioYes
titleNo
captionNo
chat_idNo
performerNo
parse_modeNoHTML
disable_notificationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It discloses that audio can be a local path or URL and that the return is a JSON Telegram Message object, but it does not mention side effects, permissions, file size limits, or error behavior. For a mutating send operation, this is a notable gap.

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 well-structured with a front-loaded purpose sentence followed by a compact parameter list and a return line. It is appropriately sized for seven parameters, though a few parameter descriptions are tautological and could be tightened.

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 all parameters and the return format, which is helpful given no annotations and no schema descriptions. However, it omits parse_mode allowed values, chat_id format, usage guidance versus sibling tools, and any operational constraints like file size or authentication. It is adequate but not complete for a tool with this many parameters.

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 adds meaningful semantics for most parameters: audio as local path or HTTP/HTTPS URL, title as track name, performer as artist name, and disable_notification as 'send silently.' Some entries like 'Audio caption' and 'Target chat identifier' are shallow, but overall it covers all seven parameters.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Send an audio file (.mp3, .m4a, etc.) to a chat.' This clearly distinguishes it from siblings like telegram_send_photo, telegram_send_document, and telegram_send_voice, even without naming them.

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

Usage Guidelines3/5

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

The description implies usage by specifying audio file formats, but it does not explicitly state when to prefer this over telegram_send_voice or telegram_send_document, nor does it mention exclusions. The intended use is inferable but not directly guided.

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

telegram_send_documentA

Send a general file or document (PDF, ZIP, source code, text file, etc.).

:param document: Local file path on disk (e.g. '/path/to/report.pdf') OR a public HTTP/HTTPS URL. :param caption: Optional document caption (0-1024 characters). :param chat_id: Target chat identifier (or @channelusername). :param parse_mode: Formatting for caption ('HTML', 'MarkdownV2', etc.). :param disable_notification: Send silently. :return: JSON formatted Telegram Message object.

ParametersJSON Schema
NameRequiredDescriptionDefault
captionNo
chat_idNo
documentYes
parse_modeNoHTML
disable_notificationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It reveals that document accepts either a local file path or a public HTTP/HTTPS URL, that captions are limited to 0-1024 characters, that parse_mode controls formatting, and that the return value is a JSON Telegram Message object. It does not mention size limits, auth requirements, or the fact that chat_id is effectively required, but the core side effect is clearly communicated.

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: a single purpose sentence followed by a tightly formatted parameter list. Every line earns its place, with no filler or redundant restating of schema titles.

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 presence of an output schema and no annotations, the description covers all input parameters and the return type, which is enough for an agent to construct a valid call. The main gap is not clarifying that chat_id is required in practice despite the schema defaulting it to null, but overall the description is largely 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?

Schema description coverage is 0%, so the description must compensate, and it does: each of the five parameters receives a meaningful one-line explanation, such as document accepting a path or URL and chat_id accepting @channelusername. It doesn't mention defaults or that chat_id is required despite the schema marking it optional, but it adds substantial value beyond the bare 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 ('Send a general file or document') with concrete examples (PDF, ZIP, source code, text file), making the tool's purpose unambiguous. The word 'general' distinguishes it from specialized sibling tools like telegram_send_photo, telegram_send_audio, and telegram_send_voice.

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 usage for non-specialized files by saying 'general file or document', but it does not explicitly state when to choose this tool over siblings or when not to use it. Sibling names provide context, but the description itself leaves routing to inference.

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

telegram_send_locationB

Send a point on the map (geographic coordinates).

:param latitude: Latitude of the location. :param longitude: Longitude of the location. :param chat_id: Target chat identifier. :param disable_notification: Send silently. :return: JSON formatted Telegram Message object.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idNo
latitudeYes
longitudeYes
disable_notificationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description must carry the behavioral disclosure. It only states 'Send a point on the map' and mentions the return format, but does not disclose any side effects, permission requirements, error conditions, or what happens if the chat_id is invalid. The description adds minimal behavioral context beyond the schema.

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 concise and well-structured: a one-line purpose followed by parameter definitions and a return type. It is front-loaded with the core action and avoids unnecessary fluff. The structure is clear and easy to parse.

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

Completeness3/5

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

The description is adequate for a simple tool, but it omits some context such as the optionality of chat_id (though the schema shows it has a default of null) and any error handling or rate limits. The return type is mentioned, and the output schema exists, so that is covered. Overall, it is sufficient for basic invocation but lacks deeper guidance for edge cases.

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 provides explicit semantic explanations for each parameter: latitude, longitude, chat_id, and disable_notification. While the schema only lists titles, the description explains 'Latitude of the location,' 'Send silently,' etc., which adds meaning. This compensates for the 0% schema coverage, though it does not go into deep detail like formats or constraints.

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

Purpose5/5

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

The description clearly states the tool's function: 'Send a point on the map (geographic coordinates).' It uses a specific verb and resource, distinguishing it from sibling tools like telegram_send_message or telegram_send_photo. The 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 Guidelines2/5

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

The description does not provide any guidance on when to use this tool versus alternatives. It does not mention exclusions or prerequisites, such as 'use this for locations only' or 'not for text messages.' The only hint is the tool name and the generic send action, but no explicit routing.

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

telegram_send_messageA

Send a text message to a Telegram chat, group, or channel.

:param text: Text of the message to be sent (up to 4096 characters). :param chat_id: Unique identifier for target chat, group, or channel username (@channelusername). If omitted, uses TELEGRAM_DEFAULT_CHAT_ID if set. :param parse_mode: Formatting mode for message text ('HTML', 'MarkdownV2', 'Markdown', or None). :param disable_web_page_preview: Disables link previews for links in this message. :param disable_notification: Sends the message silently without sound. :param reply_to_message_id: If the message is a reply, ID of the original message. :return: JSON formatted Telegram Message object.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
chat_idNo
parse_modeNoHTML
reply_to_message_idNo
disable_notificationNo
disable_web_page_previewNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations present, the description carries the full behavioral disclosure burden and does so well: it reveals the 4096-character limit, the TELEGRAM_DEFAULT_CHAT_ID fallback, available parse modes, silent sending, link-preview disabling, reply behavior, and the JSON return format. It omits permission/error/rate-limit details, but for a straightforward send operation this is substantial. No contradiction with annotations exists.

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

Conciseness5/5

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

The purpose is front-loaded in one clear sentence, followed by a compact param list and a return line. Every line adds useful information; there is no filler or 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 simple six-parameter send operation, the description covers all parameters and the return value, and the output schema exists as a further reference. It lacks only peripheral operational details like authentication requirements or error scenarios, and the missing usage-guidelines context is already penalized separately.

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

Parameters5/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 explain every parameter, and it does. It adds meaning beyond the schema for all six params: text length limit, chat_id fallback semantics, parse_mode allowed values, behavior of both boolean flags, and reply_to_message_id meaning.

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 opening sentence states a specific action ('Send'), a resource ('Telegram chat, group, or channel'), and the payload type ('text message'). This distinguishes it from sibling media tools like telegram_send_photo or telegram_send_document, even without naming them.

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

Usage Guidelines2/5

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

The description gives no guidance on when to choose this tool over alternatives such as send_photo, forward_message, or send_poll. It does not mention exclusions, prerequisites, or alternative tool names, leaving the agent to infer usage solely from the tool's name and the word 'text'.

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

telegram_send_photoA

Send a photo/image to a Telegram chat.

:param photo: Local file path on disk (e.g. '/path/to/image.png') OR a public HTTP/HTTPS URL. :param caption: Optional photo caption (0-1024 characters). :param chat_id: Unique identifier for target chat (or @channelusername). :param parse_mode: Formatting for caption ('HTML', 'MarkdownV2', 'Markdown', or None). :param disable_notification: Send silently without notification sound. :return: JSON formatted Telegram Message object.

ParametersJSON Schema
NameRequiredDescriptionDefault
photoYes
captionNo
chat_idNo
parse_modeNoHTML
disable_notificationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It does state the core side effect ('Send') and the return format ('JSON formatted Telegram Message object'), and it explains the disable_notification effect. However, it does not mention authentication requirements, rate limits, delivery irreversibility, or failure behavior, so transparency is partial.

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 opens with a one-sentence purpose, then lists each parameter with meaningful detail, and closes with the return type. There is no fluff or redundant prose; every line 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 five-parameter tool with no annotations, the description adequately specifies all invocation details including parameter semantics and return type, and an output schema exists. It falls short only by omitting usage differentiation and higher-level behavioral context such as permissions or side effects, but an agent can still call the tool correctly based on the provided information.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates: photo explains local path vs URL, caption gives length limits, chat_id explains identifier forms, parse_mode enumerates allowed values, and disable_notification defines its behavior. This is substantially richer than the schema's bare titles.

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 and resource: 'Send a photo/image to a Telegram chat.' This clearly differentiates it from sibling tools like telegram_send_document, telegram_send_audio, and telegram_send_voice without needing to inspect schemas.

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, no exclusions, and no mention of situations where send_document or another sibling would be more appropriate. The agent must infer usage solely from the tool name and sibling list.

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

telegram_send_pollA

Send a native poll to a chat or channel.

:param question: Poll question (1-300 characters). :param options: List of 2 to 10 answer options (each 1-100 characters). :param chat_id: Target chat identifier. :param is_anonymous: True if poll should be anonymous, False for public voters. :param allows_multiple_answers: True if poll allows multiple options to be checked. :return: JSON formatted Telegram Message object containing the Poll.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idNo
optionsYes
questionYes
is_anonymousNo
allows_multiple_answersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses a send action and a JSON Message return value, but it does not explain side effects such as the poll being published to chat members, permission requirements, or what happens when chat_id is null (the schema marks it optional/default null). No contradiction with annotations exists.

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

Conciseness4/5

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

The description is front-loaded with a one-sentence purpose and then a compact param list followed by return type. Every line adds information, though the param blocks could be tightened; no superfluous text.

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 straightforward send tool this is largely sufficient, but the lack of usage alternatives and the unexplained optional chat_id behavior leave gaps. Since there are no annotations, the description should have addressed the null chat_id case and any constraints around poll creation.

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 compensates by documenting all five parameters. It adds length constraints for question and options, and clarifies the boolean flags, but chat_id is only described as 'Target chat identifier', leaving the nullable/default-null behavior unexplained.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Send a native poll to a chat or channel.' This clearly distinguishes the tool from siblings like telegram_send_message or telegram_send_photo, which cover different message types, and from get/delete actions.

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 implies usage through the verb and resource but does not explicitly say when to choose this over telegram_send_message or other send tools, nor does it list exclusions or alternative conditions. An agent must infer from the name and the sentence that polls are the intended use.

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

telegram_send_voiceA

Send a voice note (.ogg encoded with OPUS) to a chat.

:param voice: Local file path on disk or HTTP/HTTPS URL. :param caption: Voice message caption. :param chat_id: Target chat identifier. :param parse_mode: Caption parse mode. :param disable_notification: Send silently. :return: JSON formatted Telegram Message object.

ParametersJSON Schema
NameRequiredDescriptionDefault
voiceYes
captionNo
chat_idNo
parse_modeNoHTML
disable_notificationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full disclosure burden. It states the primary effect (sending a voice note), the required encoding (.ogg OPUS), and the return format, but it does not mention failure conditions, file size limits, permissions, or what happens when chat_id is omitted. This is sufficient for a simple call but leaves notable behavioral gaps.

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

Conciseness5/5

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

The description is compact and well-organized: a single purpose line, a per-parameter bulleted list, and a return line. There is no redundant or filler content; each sentence adds necessary 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?

All parameters and the return type are covered, which is good for a send operation. However, the schema marks chat_id as optional with a null default, and the description does not clarify how the tool behaves without a chat_id or whether a default chat is used. It also fails to differentiate from telegram_send_audio, leaving room for incorrect tool selection.

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

Parameters5/5

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

Schema description coverage is 0%, yet the description explains every parameter with meaningful detail: voice accepts a local path or HTTP/HTTPS URL, disable_notification means 'send silently', and parse_mode is tied to the caption. This goes well beyond the bare type/title data in the schema.

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

Purpose5/5

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

The description opens with a specific action and resource: 'Send a voice note (.ogg encoded with OPUS) to a chat.' This clearly differentiates it from siblings like telegram_send_audio and telegram_send_photo, and the encoding requirement pins down exactly what kind of media is handled.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus alternatives such as telegram_send_audio or telegram_send_document. The usage context must be inferred entirely from the name and the one-line purpose, and no prerequisites or exclusions are mentioned.

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

telegram_unpin_chat_messageA

Unpin a specific message or all messages in a chat.

:param message_id: Identifier of message to unpin. If None, unpins all pinned messages. :param chat_id: Target chat identifier. :return: Status string indicating success.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idNo
message_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

Since no annotations are provided, the description must carry the full burden. It discloses some behavior (unpins a specific or all messages), but lacks details on side effects, permissions, or error conditions that would be expected for a mutation tool. It does not contradict annotations, so it is not a contradiction, but it is minimal.

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

Conciseness5/5

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

The description is concise: a one-sentence summary followed by parameter explanations. It is front-loaded with the purpose and uses a clear docstring format that is efficient and well-structured.

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

Completeness4/5

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

For a simple tool with only 2 optional parameters and an output schema, the description covers the essential information. It explains the two modes of operation and both parameters. However, it lacks potential edge cases (e.g., what happens if message_id is invalid) but these are minor given the tool's simplicity and the output schema.

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 explain the meaning of message_id ('Identifier of message to unpin. If None, unpins all pinned messages.') and chat_id ('Target chat identifier.'), which adds value beyond the schema's basic type and default info.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Unpin a specific message or all messages in a chat.' It uses a specific verb (unpin) with a clear resource (chat message) and distinguishes between two modes (specific vs all), which helps differentiate it from the sibling 'telegram_pin_chat_message'.

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

Usage Guidelines4/5

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

The description explains when to use this tool versus alternatives, though not explicitly. It mentions that if message_id is None, it unpins all messages, which guides usage. However, it does not explicitly state when not to use it, but given the sibling list, the purpose is clear.

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. 16 tool updatesv0.1.0
    • First observedtelegram_delete_message
    • First observedtelegram_forward_message
    • First observedtelegram_get_chat
    • First observedtelegram_get_chat_administrators
    • First observedtelegram_get_chat_member_count
    • First observedtelegram_get_me
    • First observedtelegram_get_updates
    • First observedtelegram_pin_chat_message
    • First observedtelegram_send_audio
    • First observedtelegram_send_document
    • First observedtelegram_send_location
    • First observedtelegram_send_message
    • First observedtelegram_send_photo
    • First observedtelegram_send_poll
    • First observedtelegram_send_voice
    • First observedtelegram_unpin_chat_message

TDQS

A3.7/5.0

Scored across 16 tools

Disambiguation5/5

Every tool targets a distinct action/resource: get_me identifies the bot, get_chat retrieves chat metadata, and the send_* variants each handle a specific media type. Pin/unpin/delete message are clearly separate operations, and get_chat_member_count vs get_chat_administrators are well-differentiated despite both being chat info queries.

Naming Consistency5/5

All tools use a consistent telegram_verb_noun pattern (telegram_send_message, telegram_get_chat, telegram_pin_chat_message). The naming convention is uniform throughout, making the tool set predictable and easy to navigate.

Tool Count4/5

At 16 tools, the server is just above the typical well-scoped range, but the count is reasonable given the breadth of Telegram messaging and chat admin operations. The send_* media variants each earn their place, though a few could arguably be consolidated.

Completeness3/5

Core messaging workflows are covered: send, forward, delete, pin, unpin, plus chat info and member retrieval. However, notable gaps exist such as edit_message, send_video/contact/sticker, get_chat_member, and leave_chat, which agents would likely need for fuller Telegram bot interactions.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers