Skip to main content
Glama
Telegram MCP

Telegram MCP

by aminkh17

Send message (requires user approval)

send_message

Sends a plain-text Telegram message to an allowlisted chat as the signed-in user, with each send requiring explicit user approval before delivery.

Instructions

Send a plain-text message to one allowlisted chat as the signed-in user. Requires allowSending in config.json. Every call shows the user an approval prompt with the exact chat and text; nothing is sent unless the user approves. Returns sent: false if the user declines. Do not retry a declined message unless the user asks.

Input Schema

NameRequiredDescriptionDefault
chatYesAllowlisted chat: @username, t.me link, numeric id, or exact title.
textYesPlain-text message to send (max 4096 characters).
replyToMessageIdNoOptional message id in the same chat to reply to.
disableNotificationNoSend silently, without a notification for recipients.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the human-in-the-loop approval prompt showing exact chat and text, the failure return shape ('sent: false' on decline), and the config prerequisite. These are the details an agent needs to avoid blind retries and to explain outcomes to the user.

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 the action and scope, followed by the prerequisite, the approval behavior, and the retry rule. No filler or repetition.

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, so the description supplies the key return semantics ('sent: false' if declined) along with the approval gate and config dependency. For a four-parameter mutation tool with annotations, nothing an agent needs before calling is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so chat formats, the 4096-character bound, replyToMessageId, and disableNotification are already documented. The description only reinforces 'plain-text' and the single-allowlisted-chat constraint, adding little parameter-level meaning beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ('Send a plain-text message') plus the scope constraint ('to one allowlisted chat as the signed-in user'), which immediately separates it from the read-oriented siblings like get_messages and search_messages. 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?

Gives clear preconditions ('Requires allowSending in config.json') and an explicit when-not-to rule ('Do not retry a declined message unless the user asks'). It does not name a sibling alternative, though the sibling list contains no other write tool, so the omission is minor.

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