Telegram MCP Server - 程序化控制Telegram的强大工具

Telegram MCP Server - 程序化控制Telegram的强大工具

社区实现 | Stars: 372 | Python | MIT License

概述

Telegram MCP Server 是一个功能完整的 Telegram 集成服务器,基于 TelethonModel Context Protocol (MCP) 构建。它让 AI 助手(如 Claude、Cursor)能够程序化地与 Telegram 账户交互,涵盖聊天管理、消息收发、联系人管理、用户资料操作和搜索发现等全方位功能。

该服务器通过 MCP 协议暴露了数十个 Telegram 工具,使得 AI 能够理解自然语言指令并执行复杂的 Telegram 操作。无论是自动化消息管理、批量群组操作,还是用户数据采集,Telegram MCP Server 都能提供强大的支持。

核心特性

  • 完整的 Telegram API 支持,基于 Telethon 实现
  • 🛠️ 60+ 工具函数,覆盖所有主要 Telegram 功能
  • 💬 聊天和群组管理(创建、编辑、权限控制等)
  • 📨 消息操作(发送、编辑、删除、转发、置顶等)
  • 👥 联系人管理(添加、删除、屏蔽、搜索等)
  • 👤 用户资料操作(查询、更新、头像管理等)
  • 🔍 搜索和发现(全局搜索、消息搜索、附近聊天等)
  • 🔄 强大的错误处理,支持多重回退策略
  • 🔐 灵活的会话管理,支持文件和字符串会话
  • 🐳 多种部署方式(本地、Docker、Docker Compose)

工具列表

聊天和群组管理(19个工具)

1. get_chats

功能:获取分页的聊天列表

参数

  • page (integer, 可选) - 页码,从1开始(默认:1)
  • page_size (integer, 可选) - 每页聊天数量(默认:20)

返回:聊天ID和标题的格式化字符串

示例

1
2
3
4
{
"page": 1,
"page_size": 20
}

2. list_chats

功能:列出聊天并支持元数据和过滤

参数

  • chat_type (string, 可选) - 聊天类型过滤器
  • limit (integer, 可选) - 返回结果数量限制

示例

1
2
3
4
{
"chat_type": "group",
"limit": 50
}

3. get_chat

功能:获取特定聊天的详细信息

参数

  • chat_id (integer, 必需) - 聊天ID

示例

1
2
3
{
"chat_id": 123456789
}

4. create_group

功能:创建新群组并添加指定用户

参数

  • title (string, 必需) - 群组标题
  • user_ids (array, 必需) - 用户ID列表

示例

1
2
3
4
{
"title": "我的新群组",
"user_ids": [111111, 222222, 333333]
}

5. create_channel

功能:创建频道或超级群组

参数

  • title (string, 必需) - 频道标题
  • about (string, 可选) - 频道简介
  • megagroup (boolean, 可选) - 是否为超级群组(默认:false)

示例

1
2
3
4
5
{
"title": "技术分享频道",
"about": "分享最新技术动态",
"megagroup": false
}

6. edit_chat_title

功能:修改聊天/群组/频道的标题

参数

  • chat_id (integer, 必需) - 聊天ID
  • title (string, 必需) - 新标题

7. delete_chat_photo

功能:删除聊天/群组/频道的头像

参数

  • chat_id (integer, 必需) - 聊天ID

8. leave_chat

功能:退出群组或频道

参数

  • chat_id (integer, 必需) - 聊天ID

9. get_participants

功能:获取聊天的所有参与者

参数

  • chat_id (integer, 必需) - 聊天ID

返回:参与者列表,包含用户ID、用户名、姓名等信息

10. get_admins

功能:获取聊天的所有管理员

参数

  • chat_id (integer, 必需) - 聊天ID

返回:管理员列表及其权限信息

11. get_banned_users

功能:获取聊天中所有被封禁的用户

参数

  • chat_id (integer, 必需) - 聊天ID

12. promote_admin

功能:提升用户为管理员

参数

  • chat_id (integer, 必需) - 聊天ID
  • user_id (integer, 必需) - 用户ID

13. demote_admin

功能:将管理员降级为普通用户

参数

  • chat_id (integer, 必需) - 聊天ID
  • user_id (integer, 必需) - 用户ID

14. ban_user

功能:封禁聊天中的用户

参数

  • chat_id (integer, 必需) - 聊天ID
  • user_id (integer, 必需) - 用户ID

15. unban_user

功能:解除用户封禁

参数

  • chat_id (integer, 必需) - 聊天ID
  • user_id (integer, 必需) - 用户ID

功能:获取群组/频道的邀请链接

参数

  • chat_id (integer, 必需) - 聊天ID

返回:邀请链接(支持多重回退方法)

17. export_chat_invite

功能:导出聊天邀请

参数

  • chat_id (integer, 必需) - 聊天ID

18. import_chat_invite

功能:通过hash导入聊天邀请

参数

  • hash (string, 必需) - 邀请hash

功能:通过链接加入聊天

参数

  • link (string, 必需) - 邀请链接

示例

1
2
3
{
"link": "https://t.me/joinchat/xxxxx"
}

消息操作(14个工具)

1. get_messages

功能:获取分页的消息列表

参数

  • chat_id (integer, 必需) - 聊天ID
  • page (integer, 可选) - 页码(默认:1)
  • page_size (integer, 可选) - 每页消息数量(默认:20)

示例

1
2
3
4
5
{
"chat_id": 123456789,
"page": 1,
"page_size": 50
}

2. list_messages

功能:列出消息并支持搜索和日期过滤

参数

  • chat_id (integer, 必需) - 聊天ID
  • limit (integer, 可选) - 结果数量限制
  • search_query (string, 可选) - 搜索查询
  • from_date (string, 可选) - 起始日期
  • to_date (string, 可选) - 结束日期

示例

1
2
3
4
5
6
{
"chat_id": 123456789,
"search_query": "重要通知",
"from_date": "2025-10-01",
"to_date": "2025-10-14"
}

3. send_message

功能:发送消息到指定聊天

参数

  • chat_id (integer, 必需) - 聊天ID
  • message (string, 必需) - 消息内容

示例

1
2
3
4
{
"chat_id": 123456789,
"message": "你好,这是一条测试消息"
}

4. reply_to_message

功能:回复特定消息

参数

  • chat_id (integer, 必需) - 聊天ID
  • message_id (integer, 必需) - 要回复的消息ID
  • text (string, 必需) - 回复内容

示例

1
2
3
4
5
{
"chat_id": 123456789,
"message_id": 12345,
"text": "感谢您的反馈"
}

5. edit_message

功能:编辑已发送的消息

参数

  • chat_id (integer, 必需) - 聊天ID
  • message_id (integer, 必需) - 消息ID
  • new_text (string, 必需) - 新消息内容

6. delete_message

功能:删除消息

参数

  • chat_id (integer, 必需) - 聊天ID
  • message_id (integer, 必需) - 消息ID

7. forward_message

功能:转发消息到其他聊天

参数

  • from_chat_id (integer, 必需) - 源聊天ID
  • message_id (integer, 必需) - 消息ID
  • to_chat_id (integer, 必需) - 目标聊天ID

示例

1
2
3
4
5
{
"from_chat_id": 111111,
"message_id": 12345,
"to_chat_id": 222222
}

8. pin_message

功能:置顶消息

参数

  • chat_id (integer, 必需) - 聊天ID
  • message_id (integer, 必需) - 消息ID

9. unpin_message

功能:取消置顶消息

参数

  • chat_id (integer, 必需) - 聊天ID
  • message_id (integer, 必需) - 消息ID

10. mark_as_read

功能:标记聊天消息为已读

参数

  • chat_id (integer, 必需) - 聊天ID

11. get_message_context

功能:获取消息的上下文(前后消息)

参数

  • chat_id (integer, 必需) - 聊天ID
  • message_id (integer, 必需) - 消息ID
  • context_size (integer, 可选) - 上下文大小(默认:5)

示例

1
2
3
4
5
{
"chat_id": 123456789,
"message_id": 12345,
"context_size": 10
}

12. get_history

功能:获取聊天历史记录

参数

  • chat_id (integer, 必需) - 聊天ID
  • limit (integer, 可选) - 消息数量限制

13. get_pinned_messages

功能:获取聊天的所有置顶消息

参数

  • chat_id (integer, 必需) - 聊天ID

14. search_messages

功能:在聊天中搜索消息

参数

  • chat_id (integer, 必需) - 聊天ID
  • query (string, 必需) - 搜索查询

联系人管理(7个工具)

1. get_contacts

功能:获取所有联系人列表

返回:联系人列表,包含用户ID、用户名、姓名等信息

2. search_contacts

功能:搜索联系人

参数

  • query (string, 必需) - 搜索查询

示例

1
2
3
{
"query": "张三"
}

3. add_contact

功能:添加新联系人

参数

  • phone (string, 必需) - 手机号码
  • first_name (string, 必需) - 名字
  • last_name (string, 可选) - 姓氏

示例

1
2
3
4
5
{
"phone": "+8613800138000",
"first_name": "张",
"last_name": "三"
}

4. delete_contact

功能:删除联系人

参数

  • user_id (integer, 必需) - 用户ID

5. block_user

功能:屏蔽用户

参数

  • user_id (integer, 必需) - 用户ID

6. unblock_user

功能:取消屏蔽用户

参数

  • user_id (integer, 必需) - 用户ID

7. get_blocked_users

功能:获取所有已屏蔽用户列表

用户和资料(6个工具)

1. get_user

功能:获取用户的详细信息

参数

  • user_id (integer, 必需) - 用户ID

返回:用户详细信息,包括用户名、姓名、头像、简介等

2. get_me

功能:获取当前登录账户的信息

返回:当前用户的完整信息

3. update_profile

功能:更新个人资料

参数

  • first_name (string, 可选) - 名字
  • last_name (string, 可选) - 姓氏
  • about (string, 可选) - 个人简介

示例

1
2
3
4
5
{
"first_name": "李",
"last_name": "四",
"about": "软件工程师"
}

4. update_username

功能:更新用户名

参数

  • username (string, 必需) - 新用户名

5. get_profile_photos

功能:获取用户的所有头像

参数

  • user_id (integer, 必需) - 用户ID

6. delete_profile_photos

功能:删除头像

参数

  • photo_ids (array, 必需) - 要删除的头像ID列表

搜索和发现(5个工具)

1. search_global

功能:全局搜索用户、群组、频道

参数

  • query (string, 必需) - 搜索查询
  • limit (integer, 可选) - 结果数量限制

示例

1
2
3
4
{
"query": "Python编程",
"limit": 20
}

2. search_messages

功能:在聊天中搜索消息

参数

  • chat_id (integer, 必需) - 聊天ID
  • query (string, 必需) - 搜索查询

3. get_nearby_chats

功能:获取附近的聊天(基于地理位置)

参数

  • latitude (number, 必需) - 纬度
  • longitude (number, 必需) - 经度

示例

1
2
3
4
{
"latitude": 39.9042,
"longitude": 116.4074
}

4. resolve_username

功能:通过用户名解析获取实体信息

参数

  • username (string, 必需) - 用户名(不包含@)

示例

1
2
3
{
"username": "telegram"
}

5. get_common_chats

功能:获取与指定用户的共同群组

参数

  • user_id (integer, 必需) - 用户ID

配置方式

环境变量

首先需要在 https://my.telegram.org/apps 获取 Telegram API 凭证:

1
2
3
4
5
6
7
8
# Telegram API ID(必需)
TELEGRAM_API_ID=12345678

# Telegram API Hash(必需)
TELEGRAM_API_HASH=abcdef1234567890abcdef1234567890

# Telegram 会话字符串(必需)
TELEGRAM_SESSION_STRING=your_generated_session_string

生成会话字符串

1
2
3
4
5
6
7
8
9
# 克隆仓库
git clone https://github.com/chigwell/telegram-mcp.git
cd telegram-mcp

# 安装依赖
uv sync

# 运行会话生成脚本
python generate_session.py

运行后按照提示输入手机号码和验证码,即可生成会话字符串。

Claude Desktop 配置

claude_desktop_config.json 中添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"mcpServers": {
"telegram": {
"command": "uv",
"args": [
"--directory",
"/path/to/telegram-mcp",
"run",
"telegram-mcp"
],
"env": {
"TELEGRAM_API_ID": "12345678",
"TELEGRAM_API_HASH": "abcdef1234567890abcdef1234567890",
"TELEGRAM_SESSION_STRING": "your_session_string"
}
}
}
}

Cursor 配置

在 Cursor 设置中添加 MCP 服务器配置,配置方式与 Claude Desktop 类似。

Docker 部署

1
2
3
4
5
6
# 使用 Docker 运行
docker build -t telegram-mcp .
docker run -e TELEGRAM_API_ID="12345678" \
-e TELEGRAM_API_HASH="abcdef1234567890" \
-e TELEGRAM_SESSION_STRING="your_session" \
telegram-mcp

Docker Compose 部署

创建 docker-compose.yml

1
2
3
4
5
6
7
8
9
version: '3.8'
services:
telegram-mcp:
build: .
environment:
- TELEGRAM_API_ID=${TELEGRAM_API_ID}
- TELEGRAM_API_HASH=${TELEGRAM_API_HASH}
- TELEGRAM_SESSION_STRING=${TELEGRAM_SESSION_STRING}
restart: unless-stopped

运行:

1
docker-compose up -d

使用场景

1. Telegram 账户自动化

通过自然语言指令让 AI 完成复杂的 Telegram 操作。

示例流程

  1. 用户:”帮我给所有群组管理员发送本周会议通知”
  2. AI 使用 get_chats 获取群组列表
  3. 对每个群组使用 get_admins 获取管理员
  4. 使用 send_message 发送通知

2. 消息批量管理

自动化处理大量消息,提高效率。

示例流程

  1. 用户:”标记所有未读消息为已读”
  2. AI 使用 get_chats 获取聊天列表
  3. 对每个聊天使用 mark_as_read 标记已读

3. 群组监控和管理

自动化群组管理任务,维护群组秩序。

示例流程

  1. 设置规则:新成员加入自动发送欢迎消息
  2. AI 监听新成员事件
  3. 使用 send_message 发送欢迎消息
  4. 使用 pin_message 置顶群规

4. 数据采集和分析

从 Telegram 采集数据进行分析。

示例流程

  1. 用户:”分析技术群组最近一周的热门话题”
  2. AI 使用 get_messages 获取消息
  3. 使用 list_messages 进行过滤
  4. 分析消息内容,提取热门关键词

5. 客户服务自动化

自动回复常见问题,提升服务效率。

示例流程

  1. AI 监听客户消息
  2. 识别常见问题类型
  3. 使用 reply_to_message 自动回复
  4. 复杂问题转发给人工客服

技术架构

核心技术栈

1
2
3
4
5
6
7
8
9
Telegram MCP Server
|
+-- Telethon (Telegram MTProto API)
|
+-- MCP Python SDK
|
+-- 会话管理(文件/字符串)
|
+-- 错误处理和日志系统

会话管理

支持两种会话管理方式:

  1. 文件会话:会话数据存储在本地文件中
  2. 字符串会话:会话数据以字符串形式存储(推荐)

错误处理机制

  • 详细的错误日志:所有错误记录到 mcp_errors.log
  • 多重回退策略:关键功能提供多种实现方法
  • 优雅降级:API 失败时自动尝试备用方案
  • 用户友好的错误消息:清晰的错误提示

账户类型检测

自动检测账户类型(用户账户 vs 机器人账户),并针对性地调用相应的 API。

与其他 MCP 服务器对比

特性 Telegram MCP Discord MCP Slack MCP
功能完整性 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐
工具数量 60+ 30+ 40+
消息管理 ✅ 完整支持 ✅ 支持 ✅ 支持
群组管理 ✅ 完整支持 ✅ 支持 ✅ 支持
用户管理 ✅ 完整支持 ✅ 部分支持 ✅ 部分支持
搜索功能 ✅ 全局+本地 ✅ 本地 ✅ 本地
地理位置 ✅ 支持 ❌ 不支持 ❌ 不支持
错误处理 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐

最佳实践

1. 安全配置

1
2
3
4
5
6
7
# 使用环境变量存储敏感信息
export TELEGRAM_API_ID="your_api_id"
export TELEGRAM_API_HASH="your_api_hash"
export TELEGRAM_SESSION_STRING="your_session"

# 不要在代码中硬编码凭证
# 不要将 .env 文件提交到版本控制

2. 会话字符串生成

1
2
3
# 推荐使用字符串会话而不是文件会话
# 更容易部署和迁移
python generate_session.py

3. 错误处理

1
2
3
# 始终检查操作结果
# MCP Server 会自动记录错误到日志
# 可以查看 mcp_errors.log 了解详情

4. 批量操作优化

对于批量操作(如批量发送消息),建议:

  • 控制速率,避免触发 Telegram 的反垃圾限制
  • 使用分页获取大量数据
  • 合理设置 page_sizelimit 参数

5. 监控和日志

1
2
3
4
5
# 定期检查错误日志
tail -f mcp_errors.log

# 监控服务器状态
# 确保会话保持有效

常见问题

Q: 如何获取 Telegram API 凭证?

访问 https://my.telegram.org/apps,使用手机号登录后创建应用,即可获得 API ID 和 API Hash。

Q: 会话字符串如何生成?

运行项目提供的 generate_session.py 脚本,按照提示输入手机号和验证码,即可生成会话字符串。

Q: 为什么某些文件操作不可用?

由于 MCP 环境对本地文件系统的访问限制,部分需要直接文件路径的工具(如 send_filedownload_media 等)已被移除。

Q: GIF 相关功能为什么不可用?

GIF 相关工具由于 Telethon 库或 Telegram API 的可靠性问题暂时被移除。

Q: 如何处理会话过期?

会话字符串理论上是永久有效的,但如果遇到会话过期问题,重新运行 generate_session.py 生成新的会话字符串即可。

Q: 支持多账户吗?

当前实现支持单个 Telegram 账户。如需支持多账户,可以运行多个 MCP Server 实例,每个实例配置不同的会话字符串。

Q: 性能如何?

  • 消息发送: ~10条/秒(受 Telegram API 限制)
  • 消息获取: ~100条/秒
  • 群组操作: 根据操作类型而异
  • 搜索性能: 取决于数据量

Q: 是否支持机器人 API?

该服务器主要针对用户账户设计,但也能自动检测并处理机器人账户的 API 调用。

注意事项

限制和约束

  1. API 限制:Telegram 对 API 调用有速率限制
  2. 文件操作:不支持直接文件上传/下载
  3. GIF 操作:暂不支持 GIF 相关功能
  4. 会话管理:需要妥善保管会话字符串
  5. 账户安全:避免在不可信环境中使用

最佳实践建议

  • 使用专门的 Telegram 账户进行自动化操作
  • 定期备份会话字符串
  • 监控 API 调用频率,避免触发限制
  • 遵守 Telegram 的使用条款和政策
  • 不要用于垃圾信息或滥用行为

评分详情

维度 评分 说明
功能性 4.5/5.0 功能完整,覆盖主要场景
文档质量 4.0/5.0 文档清晰,但可以更详细
社区活跃度 4.2/5.0 社区活跃,issues 响应及时
维护状态 4.5/5.0 持续更新,bug 修复迅速
代码质量 4.3/5.0 代码规范,错误处理完善
综合评分 4.3/5.0 优秀的 Telegram MCP 实现

总结

Telegram MCP Server 是目前功能最完整的 Telegram MCP 实现之一。它基于成熟的 Telethon 库,提供了 60+ 个工具函数,覆盖了聊天管理、消息操作、联系人管理等所有主要 Telegram 功能。

强大的错误处理机制、灵活的会话管理、多种部署方式,使得这个服务器适合各种规模的自动化需求。无论是个人使用还是企业级应用,都能找到合适的使用场景。

推荐指数: ⭐⭐⭐⭐ (4/5)

适合你的情况

  • ✅ 需要程序化控制 Telegram 账户
  • ✅ 批量消息管理和群组操作
  • ✅ 用户交互自动化
  • ✅ 数据采集和分析
  • ✅ 客户服务自动化

不适合的情况

  • ❌ 需要大量文件上传/下载操作
  • ❌ 需要 GIF 相关功能
  • ❌ 不能接受 Telegram API 的速率限制
  • ❌ 需要多账户并发操作(需要额外配置)

相关资源

更新日志

  • 2025-10-14: 完整文档更新,添加所有工具详细说明
  • 2025-10-11: 初始发布,基于 Telethon 和 MCP 实现

更新时间: 2025-10-14
数据来源: GitHub, 质量评分: 4.3/5.0

© 2026 Generative AI Discovery All Rights Reserved.
Theme by hiero