Skip to main content
Glama
TGLEEEE
by TGLEEEE

tgbot-mcp

PyPI version Python License: MIT

A trusted, open-source MCP (Model Context Protocol) server for Telegram.

Built as a clean alternative to closed-source or opaque Telegram MCP packages — bot token authentication only, no personal account access, no proprietary backend.


Features

  • Bot token auth only — uses the official Telegram Bot API (api.telegram.org). Your personal account is never touched.

  • 4 purpose-built tools for LLM workflows: send messages, send structured notifications, send notifications with action buttons, and wait for user replies.

  • Language-agnostic — tools are written in English, but the LLM responds to users in their own language automatically. No language is hardcoded.

  • Smart polling in wait_for_reply to minimise API calls while staying responsive.

  • Zero external services. Pure Python + httpx + fastmcp.


Related MCP server: mcp-telegram

Quick Start

1. Create a Telegram Bot

  1. Open Telegram and message @BotFather.

  2. Send /newbot and follow the prompts.

  3. Copy the bot token (looks like 123456:ABC-DEF...).

  4. Start a chat with your new bot, then visit:

    https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates

    Send any message to the bot and look for "chat":{"id":...} — that is your chat ID.

2. Register with Your MCP Client

Add the following to your MCP client configuration (e.g. claude_desktop_config.json):

{
  "mcpServers": {
    "tgbot-mcp": {
      "command": "uvx",
      "args": ["tgbot-mcp"],
      "env": {
        "TELEGRAM_BOT_TOKEN": "YOUR_BOT_TOKEN",
        "TELEGRAM_CHAT_ID": "YOUR_CHAT_ID"
      }
    }
  }
}

uvx runs the server directly from PyPI without a separate install step. If you don't have uv yet:

curl -LsSf https://astral.sh/uv/install.sh | sh

Alternatively, install manually and run with pip:

pip install tgbot-mcp

Then use "command": "tgbot-mcp" (without uvx) in the config above.


Tools

send_message

Send a free-form text message to the configured chat.

Parameter

Type

Default

Description

text

str

(required)

Message body. Telegram Markdown supported.

parse_mode

"Markdown" | "HTML" | ""

"Markdown"

Text formatting mode.

Example prompt: "Send a Telegram message: 'Build finished successfully in 2m 14s.'"


send_notification

Send a structured notification with an automatic event emoji.

Event

Emoji

completed

error

progress

🔄

question

Parameter

Type

Default

Description

event

str

(required)

One of the four event types above.

summary

str

(required)

One-line summary (≤200 chars).

details

str

""

Optional multi-line detail body.

Example prompt: "Notify me on Telegram that the data pipeline completed. Include row counts."


send_notification_with_buttons

Send a notification with up to 4 inline action buttons. Ideal when you want the user to pick an option without typing.

Parameter

Type

Default

Description

event

str

(required)

Event type.

summary

str

(required)

One-line summary.

buttons

list[str]

(required)

1–4 button labels. Each label is also the reply value.

details

str

""

Optional context text.

Example prompt: "Ask me via Telegram whether to deploy to staging or production."


wait_for_reply

Block until the user replies (text message or button tap) or the timeout expires.

Parameter

Type

Default

Max

Description

max_wait_seconds

int

1800

no limit

How long to wait for a reply.

Smart polling schedule:

Elapsed time

Poll interval

0 – 10 minutes

30 seconds

10 minutes – 1 hr

60 seconds

1 hr+

120 seconds

LLM guidelines for max_wait_seconds:

Scenario

Recommended value

Simple yes/no question

300 (5 min)

General task approval

1800 (30 min) ✓

Stock price / event alert

1800 (30 min)

End-of-day review

7200 (2 hr)

Overnight / long-running job

86400 (24 hr)

Multi-day wait

any value — no limit


Typical LLM Workflow

LLM: [does some long task]
  → send_notification_with_buttons(
        event="question",
        summary="Finished analysis. What should I do next?",
        buttons=["📊 Generate report", "📧 Send email", "🔁 Re-run with new params"]
    )
  → wait_for_reply(max_wait_seconds=1800)
  → [user taps "📊 Generate report"]
LLM: [generates the report]
  → send_notification(event="completed", summary="Report ready!", details="...")

Environment Variables

Variable

Required

Description

TELEGRAM_BOT_TOKEN

Bot token from @BotFather

TELEGRAM_CHAT_ID

Chat ID to send messages to


Development

# Clone and install in editable mode
git clone https://github.com/TGLEEEE/tgbot-mcp
cd tgbot-mcp
pip install -e ".[dev]"

# Run directly
TELEGRAM_BOT_TOKEN=... TELEGRAM_CHAT_ID=... python -m tgbot_mcp.server

Security

  • Only the official Telegram Bot API is used (api.telegram.org). No third-party relay.

  • Bot tokens are read from environment variables — never hardcoded.

  • Only the chat configured via TELEGRAM_CHAT_ID receives messages.

  • No personal Telegram account credentials are ever required.


License

MIT — see LICENSE.

Available Tools

4 tools
send_messageA

Send a free-form text message to the configured Telegram chat.

Use this for casual messages, inline code snippets, status updates, or any content that does not require structured formatting.

Args: text : The message body. Supports Telegram Markdown v1 by default. parse_mode : 'Markdown', 'HTML', or '' for plain text. Default: 'Markdown'.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
parse_modeNoMarkdown

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?

No annotations are provided, so the description carries full burden. It discloses formatting support (Markdown, HTML, plain text) and default parse mode. However, it omits potential behavioral traits like idempotency, error handling, rate limits, or whether the message is sent immediately or queued.

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 (two sentences plus args) and front-loaded with purpose. Every sentence adds value without 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?

Given the tool's simplicity, the description covers usage, formatting, and parameters adequately. An output schema exists, so return values need not be described. Minor gaps like character limits or error behavior exist, but overall it is complete for typical use.

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 0%, so the description must compensate. It adds meaning to both parameters: 'text' is described as message body with Markdown support; 'parse_mode' is explained with options and default. This provides useful context beyond the schema types.

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 sends a free-form text message to a configured Telegram chat, with specific verb and resource. It distinguishes from siblings like send_notification_with_buttons and wait_for_reply, 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 Guidelines4/5

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

The description explicitly indicates when to use this tool: 'for casual messages, inline code snippets, status updates, or any content that does not require structured formatting.' It implies not to use for notifications with buttons or replies, but does not explicitly name alternatives.

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

send_notificationA

Send a structured notification to the configured Telegram chat.

Automatically prepends an emoji for quick visual scanning. Default emojis by event type: completed → ✅ error → ❌ progress → 🔄 question → ❓

Override the default emoji with the icon parameter when the context calls for something more specific (e.g. icon='🚀' for a deployment, '🧪' for a test run, '📊' for a report).

Args: event : Event type — 'completed', 'error', 'progress', or 'question'. summary : One-line summary shown prominently (≤200 chars recommended). details : Optional multi-line body — stack traces, next steps, metrics, etc. icon : Optional emoji to override the default event icon.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventYes
summaryYes
detailsNo
iconNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Discloses key behavior: automatic emoji prepending, default emojis by event type, and icon override. No annotations are provided, so description carries full burden; it does a good job describing the tool's operation without contradictions.

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?

Concise yet comprehensive. Uses bullet points for default emojis and examples. Every sentence adds value; no fluff 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?

Given 4 parameters, no annotations, and presence of output schema, the description covers all necessary behavioral and parameter information. It is fully complete for an agent to invoke correctly.

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 coverage is 0%, but the description fully explains each parameter: event (enum values listed), summary (one-line, ≤200 chars), details (multi-line), icon (optional override). Adds meaningful context beyond schema structure.

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?

Clearly states the action (send) and resource (structured notification to Telegram chat). Distinguishes from siblings by specifying that it sends a structured notification with automatic emoji prepending, unlike send_message (presumably plain) or send_notification_with_buttons (interactive).

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?

Provides examples of when to override icons (deployment, test run, report) but does not explicitly guide when to use this tool versus siblings like send_message or wait_for_reply. Implicit usage is clear but lacks exclusions.

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

send_notification_with_buttonsA

Send a structured notification with up to 4 inline action buttons.

Buttons let the user reply with a single tap instead of typing. After sending, call wait_for_reply to capture the chosen button or typed reply.

Button design guidelines:

  • Provide 2–4 buttons with clear, action-oriented labels.

  • Keep each label under 30 characters.

  • Buttons are suggestions — users can always type a custom reply instead.

  • Use emoji prefixes in labels to aid scannability (e.g. '✅ Approve', '❌ Cancel').

Args: event : Event type — 'completed', 'error', 'progress', or 'question'. summary : One-line summary (≤200 chars). buttons : List of 1–4 button label strings. Each label becomes the button text AND the callback payload. details : Optional additional context or instructions for the user. icon : Optional emoji to override the default event icon.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventYes
summaryYes
buttonsYes
detailsNo
iconNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/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 full burden. It explains buttons are suggestions, users can type replies, and gives design guidelines (2-4 buttons, under 30 chars, emoji prefixes). It also notes that button labels become callback payloads.

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 well-structured: a purpose sentence, bulleted guidelines, and an Args list. Every sentence adds value with no redundancy.

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 the tool has 5 parameters (3 required) and an output schema, the description covers all parameter semantics, workflow integration with wait_for_reply, and button design constraints. It is complete for an agent to use correctly.

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 coverage is 0%, but the description compensates with an 'Args' section detailing each parameter: event enum, summary length ≤200, buttons list constraints (1-4 items, labels under 30 chars, payload behavior), details and icon optional with descriptions.

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 sends a structured notification with up to 4 inline action buttons. This distinct purpose differentiates it from siblings like send_notification and send_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 explicitly states to call wait_for_reply after sending, providing clear workflow guidance. It doesn't explicitly exclude sibling tools but 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.

wait_for_replyA

Wait for a reply from the user via Telegram and return it.

Handles both plain text messages and inline button taps (callback queries).

Smart polling intervals (minimises API calls): 0 – 10 min elapsed → poll every 30 s 10 min – 1 hr → poll every 60 s 1 hr+ → poll every 120 s

LLM guidelines for choosing max_wait_seconds: Simple yes/no or quick question → 300 (5 min) General task approval → 1 800 (30 min) ← default Stock price / alert trigger → 1 800 (30 min) End-of-day review → 7 200 (2 hr) Overnight / long-running job → 86 400 (24 hr) Multi-day wait → any value — no maximum

Args: max_wait_seconds : How long to wait. Default 1800, no upper limit. Pick a value appropriate to how soon a reply is expected.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_wait_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

The description transparently outlines smart polling intervals and behavior for different elapsed times. However, it does not mention potential side effects, error handling, or authentication requirements, leaving minor 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 well-structured, concise, and front-loaded with the main purpose. Every sentence adds value, using bullet points and a clear table for parameter guidance.

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 the tool's simplicity (one optional parameter, output schema present), the description is sufficiently complete, covering behavior, parameter selection, and usage context without unnecessary details.

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 single parameter max_wait_seconds is thoroughly explained with a default, a description of its purpose, and a table of recommended values for various contexts, compensating for the 0% schema description coverage.

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 waits for a user reply via Telegram and returns it, distinguishing it from sibling tools that send messages. It specifies handling of both text and callback queries.

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?

The description provides explicit guidelines for when to use the tool, including a detailed table mapping scenarios to recommended max_wait_seconds values, helping the agent select appropriate parameters.

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. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.2
    • First observedsend_message
    • First observedsend_notification
    • First observedsend_notification_with_buttons
    • First observedwait_for_reply

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a distinct purpose: free-form text, structured notification, notification with buttons, and waiting for replies. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores (send_message, send_notification, send_notification_with_buttons, wait_for_reply).

Tool Count4/5

With only 4 tools, the set is minimal but appropriately scoped for a Telegram bot focused on sending messages and awaiting replies. Slightly thin but not inadequate.

Completeness4/5

The core interaction loop (send message, structured notification with/without buttons, wait for reply) is covered. Missing features like message editing or history are minor gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables interaction with Telegram to send, read, and search messages across chats and dialogs. It supports waiting for incoming messages and retrieving conversation history through natural language commands.
    14
    4
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that wraps the Telegram Bot API into semantic tools for LLM agents, supporting multi-bot management for sending and receiving messages. It enables agents to send text, photos, and documents, as well as fetch recent updates from multiple configured Telegram bots.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server enabling AI agents to interact with users via Telegram, supporting message and image sending, inline quick replies, and waiting for user responses.
    13
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for sending and receiving Telegram messages via a bot, enabling AI assistants to interact directly through Telegram by sending messages, reading recent messages, and sending photos.
    24
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TGLEEEE/tgbot-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server