From better-telegram-mcp
Compose and post formatted content to a Telegram channel -- MarkdownV2 escaping, message splitting, media ordering
npx claudepluginhub n24q02m/claude-plugins --plugin better-telegram-mcpThis skill uses the workspace's default tool permissions.
Compose and post formatted content to a Telegram channel with correct formatting.
Sends messages, images, polls, and formatted media to Telegram channels and groups via Bot API. Handles inline keyboards and templates for marketing, announcements, and community posts.
Composes rich Telegram messages with HTML formatting via direct API. Ideal for structured alerts, status updates, lists, reports, and notifications needing underlines, spoilers, expandable quotes, or ID mentions.
Fetches latest messages from Telegram channels and sends HTML-formatted messages using Python scripts. Requires bot token and channel ID. Useful for Telegram bot interactions.
Share bugs, ideas, or general feedback.
Compose and post formatted content to a Telegram channel with correct formatting.
Identify target channel:
chats(action="list") to find the channelCompose content with the user:
Handle media attachments (if any):
media(action="send_photo", chat_id="...", file_path="...", caption="...") -- caption goes WITH the photo, not as a separate messagemedia(action="send_document", chat_id="...", file_path="...")Split long messages if content exceeds 4096 characters:
Send and verify:
messages(action="send", chat_id="<channel>", text="<content>", parse_mode="MarkdownV2")All these characters MUST be escaped with \ when used as literal text (outside formatting markup):
_ * [ ] ( ) ~ ` > # + - = | { } . !
| Intent | Correct MarkdownV2 |
|---|---|
| Bold text | *bold* |
| Italic text | _italic_ |
| Code inline | `code` |
| Code block | ```language\ncode\n``` |
| Link | [text](https://url) |
| Literal dot in "v2.0" | v2\.0 |
| Literal dash in list | \- item |
| Price "$9.99" | \$9\.99 |
| Exclamation "Done!" | Done\! |
| Parenthetical "(note)" | \(note\) |
| Hashtag "#topic" | \#topic |
When nesting, the inner delimiter must also be escaped:
*_bold italic_* -- the _ inside *...* does NOT need escaping_ inside bold: *score\_value* -- MUST escape. in URLs used as plain text (not inside [](...))! at end of sentences- in bulleted lists (use \- or switch to HTML <li>)( ) in regular text (Telegram interprets them as link syntax)