Skip to main content
Glama

Publish text, media or an AI voice to a channel

telegram_create_post
DestructiveIdempotent

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. Publish text, a generated voice from speech_text, one photo/document, or an album of 2–10 photos/videos or documents to a connected channel as the channel. This broadcasts to its audience, not a private recipient. Show the complete text, all media URLs in order, buttons and channel, obtain explicit confirmation, then call once. Albums cannot have buttons or mix documents with photos/videos. Requires channel ownership and bot Post messages permission. Use read/search tools to inspect posts. No scheduling. On uncertain delivery inspect the channel; never automatically resend with a new request_id.

Input Schema

NameRequiredDescriptionDefault
textNoExact post text or caption; captions have a 1024-character limit.
albumNoOrdered album of 2–10 public HTTPS media URLs. Photos and videos may mix; documents must form a document-only album. Mutually exclusive with media and buttons. text/format supplies the first item caption (max 1024 characters). Returns message_ids for all items and media_group_id; edit/delete targets one item, not the whole album.
mediaNo
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.
formatNo
buttonsNoHTTPS link buttons. Empty array removes buttons on edit. Arbitrary callbacks and executable actions are not supported.
confirmedYesTrue only after showing the channel, exact content/button destinations or target post/action and receiving explicit user confirmation.
channel_idYesChannel chat_id returned by telegram_list_chats or telegram_find_chat, connected through /channels.
request_idYesUnique key for this user-approved action. Reuse the same key for retries; never generate a new one to retry uncertain delivery.
save_voiceNoSave this voice for future sends only when the user asks to remember/change their preference.
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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 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 / 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. Changed3 schema fields changed
    • 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. Changed1 schema field changed
    • addedInput schema / properties / album
      Added value: +{
      +  "description": "Ordered album of 2–10 public HTTPS media URLs. Photos and videos may mix; documents must form a document-only album. Mutually exclusive with media and buttons. text/format supplies the first item caption (max 1024 characters). Returns message_ids for all items and media_group_id; edit/delete targets one item, not the whole album.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "type": {
      +        "enum": [
      +          "photo",
      +          "video",
      +          "document"
      +        ],
      +        "type": "string"
      +      },
      +      "url": {
      +        "$ref": "#/properties/media/properties/url"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 10,
      +  "minItems": 2,
      +  "type": "array"
      +}
  4. Added

TDQS

A4.2/5.0
Behavior5/5

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

Goes well beyond annotations, disclosing quota tiers, the voice_choice_required and voice_limit_exhausted return states, request_id reuse semantics for retries, and the no-resend-on-uncertain-delivery rule. This is exactly the behavioral context an agent needs before a destructive, idempotent open-world send.

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

Conciseness3/5

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

Information-dense with little filler, but poorly front-loaded: voice-specific mechanics dominate the opening and the actual general purpose appears only in the second half. The rules around request_id/confirmed are also restated, adding length without new value.

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 an 11-parameter, nested-object, destructive send tool with no output schema, the description covers quota, confirmation flow, retry safety, voice preferences, album constraints, and failure recovery. Nothing material to correct invocation appears to be 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 already 82%, and the description adds real meaning: voice must be an explicitly user-chosen value, save_voice stores only on explicit user request, request_id must be stable and reused on retry, and speech_text is mutually exclusive with media/album. The mutual-exclusivity and preference-persistence rules are not obvious from the schema 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 the tool publishes text, media, or a generated AI voice to a connected channel and broadcasts to an audience rather than a private recipient, which distinguishes it from the DM siblings. However, the description leads with voice-generation details before stating the general purpose, so the core 'what it does' is buried and arrives mid-paragraph.

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 strong operational guidance: show full content, obtain explicit confirmation, call once, no scheduling, use read/search tools to inspect posts, and never auto-resend on uncertain delivery. It differentiates from private recipient tools but never names the close siblings telegram_send_message or telegram_send_media, leaving that routing to inference.

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