Skip to main content
Glama

Generate a voice message or send media to Telegram

telegram_send_media
Destructive

Generate an AI voice message from speech_text and send it to Telegram in one call. Maximum 800 characters. Requires the confirmed recipient and exact speech text, disclosure of AI generation, confirmed=true and a stable request_id. Available voices: Marin (female) and Cedar (male). Set voice only to a choice explicitly provided by the user; otherwise omit it to use the saved preference. If no preference exists, voice_choice_required is returned without generation, delivery or quota usage. Ask the user to choose a voice and whether to remember it, then repeat with the same request_id. save_voice=true stores the explicitly selected voice; it can be changed on a later send. On voice_limit_exhausted, explain the allowance and reset date returned in quota. On uncertain delivery, inspect the chat before any further send. Free includes 3 lifetime voices; Plus includes 30 per paid period; Unlimited includes 100. Report the remaining allowance after sending.

Send to a resolved private chat or group. Choose exactly one source: • speech_text — generate and send a new AI voice message from text. • from_chat_id + from_message_id — resend an existing archived file using its Telegram file ID; no upload. Imported history has no file ID. • url — send an existing media file at a public http(s) link.

Sending is immediately visible: confirm the recipient and content first. Private business chats send as the user; groups send as the bot. Use telegram_create_post for connected channels.

Input Schema

NameRequiredDescriptionDefault
urlNoPublic http(s) link to an existing media file. Mutually exclusive with speech_text and from_chat_id + from_message_id.
voiceNoUse only a voice explicitly chosen by the user: marin (female) or cedar (male). Otherwise omit this field to use their saved choice; if none exists, the tool returns voice_choice_required. Never guess from the message text.
captionNoText under the media. Markdown is converted.
chat_idYesWhere to send it, from telegram_find_chat.
confirmedNoFor generated voices, true only after confirming recipient and exact speech text.
request_idNoRequired for generated voices: stable action key, 8–100 letters, digits, underscores or hyphens. Reuse on retries.
save_voiceNoSave this voice for future sends only when the user asks to remember/change their preference.
as_documentNoSend as a file rather than a photo/video, keeping full quality.
speech_textNoExact text to synthesize and send as an AI-generated Telegram voice message, up to 800 Unicode characters. Audio generation and delivery are included in this call. Mutually exclusive with url, archived media and album.
from_chat_idNoChat holding the file to resend.
from_message_idNomessage_id of the message holding the file.
message_thread_idNoForum topic to post into, in a group that has them.
reply_to_message_idNoQuote this message_id.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / speech_text / description
      Previous value: -"Generate an AI voice reading this exact text, up to 800 Unicode characters. Exclusive with URL, archived media or album. Ask Marin (female) or Cedar (male) once if no saved preference."New value: +"Exact text to synthesize and send as an AI-generated Telegram voice message, up to 800 Unicode characters. Audio generation and delivery are included in this call. Mutually exclusive with url, archived media and album."
    • changedInput schema / properties / url / description
      Previous value: -"Public http(s) link for Telegram to fetch, instead of from_*."New value: +"Public http(s) link to an existing media file. Mutually exclusive with speech_text and from_chat_id + from_message_id."
    • changedInput schema / properties / voice / description
      Previous value: -"Explicit voice choice; omit to use the saved voice."New value: +"Use only a voice explicitly chosen by the user: marin (female) or cedar (male). Otherwise omit this field to use their saved choice; if none exists, the tool returns voice_choice_required. Never guess from the message text."
  2. Changed5 schema fields changed
    • addedInput schema / properties / confirmed
      Added value: +{
      +  "description": "For generated voices, true only after confirming recipient and exact speech text.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / request_id
      Added value: +{
      +  "description": "Required for generated voices: stable action key, 8–100 letters, digits, underscores or hyphens. Reuse on retries.",
      +  "type": "string"
      +}
    • addedInput schema / properties / save_voice
      Added value: +{
      +  "description": "Save this voice for future sends only when the user asks to remember/change their preference.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / speech_text
      Added value: +{
      +  "description": "Generate an AI voice reading this exact text, up to 800 Unicode characters. Exclusive with URL, archived media or album. Ask Marin (female) or Cedar (male) once if no saved preference.",
      +  "type": "string"
      +}
    • addedInput schema / properties / voice
      Added value: +{
      +  "description": "Explicit voice choice; omit to use the saved voice.",
      +  "enum": [
      +    "marin",
      +    "cedar"
      +  ],
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Well beyond the annotations, it discloses that sending is instantly visible and irreversible, that missing voice choice returns voice_choice_required without using quota or generating, that voice_limit_exhausted returns a reset date, that free tier is 3 lifetime voices, and that uncertain delivery requires inspecting the chat first. It also specifies asymmetric identity behavior (private business chats as user, groups as bot) and the request_id retry contract.

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?

Purpose and the critical constraints are front-loaded, and the bulleted source list is scannable. It is dense but most sentences carry non-redundant operational rules (quota tiers, voice_choice_required loop); a few quota details and the 'Markdown is converted' style asides could be trimmed without loss.

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 13-parameter mutation tool with no output schema, it covers the hard parts: mode exclusivity, confirmation gating, idempotency via request_id, error states and their required follow-ups. What it lacks is any statement of what a successful call returns (message id, remaining allowance shape) despite telling the agent to report remaining allowance, leaving the success path inferred.

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 baseline is 3, but the description adds policy meaning the schema does not: the exclusivity between speech_text, from_chat_id + from_message_id and url, the 800-character cap, the voice-selection rule (only user-specified, never guess), and that save_voice can be changed later. Remaining parameters (caption, message_thread_id, reply_to_message_id, as_document) are not elaborated in prose, which keeps it from a 5.

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 names a specific verb and resource ('Generate an AI voice message ... and send it to Telegram in one call') and the second block enumerates the three mutually exclusive send modes. An agent can immediately tell this apart from telegram_send_message, telegram_create_post and the read-only telegram_get_file siblings.

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 states when this tool is wrong ('Use telegram_create_post for connected channels'), how to pick a chat ('Send to a resolved private chat or group'), and the rule for choosing a source ('Choose exactly one source'). It also gives a conditional path ('If no preference exists ... ask the user to choose a voice') that tells the agent exactly what to do next.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources