Telegram MCP Server
Provides tools for sending messages, getting channel info, forwarding messages, pinning messages, and getting channel members; supports AI-powered responses with mention-only mode, rate limiting, and access control.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Telegram MCP Serversend 'Hi there' to @mygroup"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Telegram MCP Server
Overview
An MCP (Model Context Protocol) server for interacting with Telegram bots and channels using the Telegraf library. This server enables AI agents to send messages, manage channels, forward content, and respond intelligently to Telegram conversations.
By implementing the Model Context Protocol (MCP), this server allows Large Language Models (LLMs) to interact with Telegram directly through their context window, bridging the gap between AI and messaging platforms.
Related MCP server: mcp-telegram
Features
Core Tools
SEND_MESSAGE: Send messages to channels or chats with optional topic support
GET_CHANNEL_INFO: Get information about channels/chats
FORWARD_MESSAGE: Forward messages between chats
PIN_MESSAGE: Pin messages in channels
GET_CHANNEL_MEMBERS: Get list of channel administrators
AI Sampling (Enhanced)
Intelligent Responses: AI-powered responses using FastMCP sampling
Mention-Only Mode: Smart filtering - responds when mentioned in groups
Multi-Message Types: Supports text, photos, documents, voice, video, stickers, locations, contacts, polls
Access Control: Configurable user/chat allow/block lists
Rate Limiting: Per-user and per-chat rate limiting
Advanced Configuration: Highly customizable behavior and templates
Installation
Using npx (Recommended)
To use this server without installing it globally:
npx @iqai/mcp-telegramBuild from Source
git clone https://github.com/IQAIcom/mcp-telegram.git
cd mcp-telegram
pnpm install
pnpm run buildRunning with an MCP Client
Add the following configuration to your MCP client settings (e.g., claude_desktop_config.json).
Minimal Configuration
{
"mcpServers": {
"telegram": {
"command": "npx",
"args": ["-y", "@iqai/mcp-telegram"],
"env": {
"TELEGRAM_BOT_TOKEN": "your_bot_token_here"
}
}
}
}Advanced Configuration (Local Build)
{
"mcpServers": {
"telegram": {
"command": "node",
"args": ["/absolute/path/to/mcp-telegram/dist/index.js"],
"env": {
"TELEGRAM_BOT_TOKEN": "your_bot_token_here",
"SAMPLING_ENABLED": "true",
"SAMPLING_MENTION_ONLY": "true"
}
}
}
}Configuration (Environment Variables)
Required
Variable | Required | Description |
| Yes | Your Telegram bot token from @BotFather |
Sampling Configuration
Variable | Default | Description |
|
| Enable/disable AI sampling entirely |
|
| Only respond when mentioned in groups |
|
| Always respond in DMs |
|
| Max tokens per AI response |
|
| Show typing indicator |
|
| Log but don't respond |
Access Control
Variable | Default | Description |
|
| Comma-separated chat IDs/usernames to allow (empty = all) |
|
| Comma-separated chat IDs/usernames to ignore |
|
| Comma-separated user IDs to allow (empty = all) |
|
| Comma-separated user IDs to ignore |
|
| Comma-separated user IDs who can use admin commands |
Rate Limiting
Variable | Default | Description |
|
| Max requests per user per minute |
|
| Max requests per chat per minute |
Message Type Support
Variable | Default | Description |
|
| Enable text messages |
|
| Enable photo messages |
|
| Enable document uploads |
|
| Enable voice messages |
|
| Enable video messages |
|
| Enable sticker messages |
|
| Enable location sharing |
|
| Enable contact sharing |
|
| Enable poll messages |
Content Filtering
Variable | Default | Description |
|
| Minimum message length |
|
| Maximum message length |
|
| Only respond to messages with these keywords |
|
| Ignore messages starting with / |
Usage Examples
Market Discovery
"Send a message to @mychannel saying hello"
"Get information about @telegram channel"
"Forward message 123 from @source to @destination"
Bot Commands
/start: Initialize the bot and get a welcome message/help: Get help information about available features/config: View current configuration (admin users only)
MCP Tools
FORWARD_MESSAGE
Forward a message from one chat to another
Parameter | Type | Required | Description |
| string | number | Yes |
| string | number | Yes |
| number | Yes | ID of the message to forward |
| boolean | Forward message silently |
GET_CHANNEL_INFO
Get information about a Telegram channel or chat
Parameter | Type | Required | Description |
| string | number | Yes |
GET_CHANNEL_MEMBERS
Get a list of channel administrators and members
Parameter | Type | Required | Default | Description |
| string | number | Yes | |
| number | 10 | Maximum number of members to retrieve (1-50) |
PIN_MESSAGE
Pin a message in a Telegram chat or channel
Parameter | Type | Required | Description |
| string | number | Yes |
| number | Yes | ID of the message to pin |
| boolean | Pin message silently |
SEND_MESSAGE
Send a message to a Telegram chat or channel
Parameter | Type | Required | Description |
| string | number | Yes |
| string | Yes | The message text to send |
| number | The topic ID for forum channels (optional) | |
| string | Optional parse mode: |
Development
Build Project
pnpm run buildDevelopment Mode (Watch)
pnpm run watchLinting & Formatting
pnpm run lint
pnpm run formatProject Structure
src/tools/: Individual tool definitionssrc/services/: Telegram service and bot logicsrc/sampling/: AI sampling feature implementationsrc/config.ts: Configuration with Zod validationsrc/index.ts: Server entry point
Getting Your Bot Token
Message @BotFather on Telegram
Use
/newbotcommandFollow the prompts to create your bot
Copy the bot token provided
Set it as an environment variable
Resources
Disclaimer
This project is an unofficial tool. Users should ensure their bot usage complies with Telegram's Terms of Service and Bot API policies.
License
Available Tools
5 toolsFORWARD_MESSAGEC
Forward a message from one chat to another
| Name | Required | Description | Default |
|---|---|---|---|
| toChatId | Yes | Destination chat ID or username | |
| messageId | Yes | ID of the message to forward | |
| fromChatId | Yes | Source chat ID or username | |
| disableNotification | No | Forward message silently |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states the basic action without disclosing important behaviors like whether the user must be a member of both chats, if the original message content is preserved, or if there are any rate limits. The agent has no insight into side effects or setup requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that is front-loaded with the verb and key objects. Every word is functional, but it might be too brief and could benefit from a second sentence for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations, output schema, and complexity of forwarding (which involves two chats and message IDs), the description is insufficient. It doesn't explain what happens if the message is deleted, if the user lacks permissions, or return behavior. Sibling tools are listed but no comparison is made.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter has a description within the schema. The tool description adds no additional meaning beyond the schema fields; it merely summarizes the action. No new parameter constraints or usage tips are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Forward' and resource 'a message from one chat to another', making the action obvious. However, it doesn't differentiate from the sibling SEND_MESSAGE (which sends new messages) beyond the verb. No additional context like 'preserving original sender' is given.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like SEND_MESSAGE, or when not to use it. The description is purely declarative without any context about prerequisites, restrictions, or comparison to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
GET_CHANNEL_INFOB
Get information about a Telegram channel or chat
| Name | Required | Description | Default |
|---|---|---|---|
| channelId | Yes | The channel ID or username (e.g., @channelname or -1001234567890) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description must disclose behavior. It implies read-only but does not specify return format, permissions, rate limits, or whether it is destructive. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with one sentence. It front-loads the purpose but sacrifices depth for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description should provide more context about what information is returned. It is incomplete for an agent to know what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter channelId is fully described in the schema (100% coverage). The description adds example formats, which is helpful but does not add significant new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get information about a Telegram channel or chat', indicating a read operation distinct from siblings like SEND_MESSAGE or GET_CHANNEL_MEMBERS. However, 'information' is vague and could be more specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. It is implied for retrieving metadata, but no direct comparison or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
GET_CHANNEL_MEMBERSC
Get a list of channel administrators and members
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of members to retrieve (1-50) | |
| channelId | Yes | The channel ID or username |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does not mention important traits such as pagination (though limit parameter exists), rate limits, error handling, or whether the list is comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and to the point. It front-loads the core functionality without extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, so the description should compensate. It does not explain the return format, whether members include roles or metadata, or how pagination works with the limit parameter. This is insufficient for a tool that returns a list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is fully documented (100% coverage) with descriptions for each parameter. The description adds no new meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieving a list of channel administrators and members. The verb 'Get' and resource 'channel members' make it specific. However, it does not explicitly distinguish from sibling tools like GET_CHANNEL_INFO, which might overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as GET_CHANNEL_INFO or SEND_MESSAGE. There are no usage constraints or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
PIN_MESSAGEB
Pin a message in a Telegram chat or channel
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | The chat ID or channel username | |
| messageId | Yes | ID of the message to pin | |
| disableNotification | No | Pin message silently |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does not mention permissions needed, effects on other pinned messages, or whether the action is reversible. The description is too minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no unnecessary words. However, it could be slightly expanded without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 3 parameters and no output schema, the description is minimally complete but lacks context about the response or side effects. It does not cover potential failure modes or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented in the schema. The description adds no additional meaning beyond the schema, meeting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Pin a message' and the context 'in a Telegram chat or channel'. This is specific and distinct from sibling tools like SEND_MESSAGE or FORWARD_MESSAGE.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or exclusions. The description only states what the tool does, not when it's appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
SEND_MESSAGEB
Send a message to a Telegram chat or channel
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The message text to send | |
| chatId | Yes | The chat ID or channel username (e.g., @channelname or -1001234567890) | |
| topicId | No | The topic ID for forum channels (optional) | |
| parseMode | No | Parse mode for Telegram rendering. Use Text for plain text without formatting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden of behavioral disclosure. It only states 'Send a message' without mentioning side effects, rate limits, permissions, or that the tool may return a message object. For a mutation tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundant words. It is front-loaded and appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should explain what the tool returns (e.g., the sent message object). It does not, leaving the agent to infer. For a simple tool with 4 parameters, this is a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the parameter descriptions in the schema, but does not need to since the schema already describes each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Send a message to a Telegram chat or channel' clearly states the verb (Send) and resource (message to a Telegram chat or channel). It distinguishes from sibling tools like FORWARD_MESSAGE and PIN_MESSAGE by specifying it sends a new message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or scenarios where other tools like FORWARD_MESSAGE would be more appropriate.
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.
5 tool updates
v0.1.4- First observed
FORWARD_MESSAGE - First observed
GET_CHANNEL_INFO - First observed
GET_CHANNEL_MEMBERS - First observed
PIN_MESSAGE - First observed
SEND_MESSAGE
TDQS
Each tool has a clearly distinct purpose: sending, forwarding, pinning messages, getting channel info, and listing members. No overlap or ambiguity.
All tool names follow the same UPPER_SNAKE_CASE verb_noun pattern, e.g., SEND_MESSAGE, GET_CHANNEL_INFO. Highly consistent.
Five tools is perfectly scoped for a Telegram MCP server, covering essential messaging and channel operations without excess.
Covers core operations (send, forward, pin, info, members) but is missing update/delete message capabilities, which are reasonable gaps for a focused tool set.
Maintenance
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
Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
Official MCP server for Agentwork — delegate tasks to AI agents with human-in-the-loop
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn 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.144MIT
- FlicenseNot gradedqualityDmaintenanceAn 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.-
- AlicenseNot gradedqualityBmaintenanceMCP server that enables Telegram bot interaction via Telegraf, providing tools for sending, replying, reacting, editing, deleting, forwarding messages, and receiving Telegram events over an optional notification channel.462MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server enabling AI agents to interact with users via Telegram, supporting message and image sending, inline quick replies, and waiting for user responses.13MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/BrainDAO/mcp-telegram'
If you have feedback or need assistance with the MCP directory API, please join our Discord server