mcp-tg
电报客户端API(MTProto)的MCP服务器。提供58个工具、4个资源、3个提示和论点完成,用于全面的Telegram帐户管理。
用途 gotd/td 对于MTProto协议,这是一个 用户账户 客户端,而不是机器人。
MCP协议支持
| 功能 | 状态 |
|---|---|
| 工具 | 58个带注释的工具(只读/幂等/写入/破坏性) |
| 资源 | 4(对话框、个人资料、聊天信息、聊天消息) |
| 提示 | 3(回复、总结、搜索和回复) |
| 完成 | 从对话框自动完成对等参数 |
| 诱导 | 身份验证流程(电话、代码、2FA密码) |
| 进度 | 文件上传、媒体相册、消息搜索 |
| 根 | 上传/下载的文件路径验证 |
| 传输 | stdio+HTTP/SSE |
| KeepAlive | 30秒ping间隔 |
| 中间件 | 身份验证、请求日志 |
电报协议功能
- 对等高速缓存 --具有访问哈希的解析对等体被缓存在内存中,因此数字ID查找重用有效的哈希,而不是失败
- 邀请链接 —
t.me/+hash和t.me/joinchat/hash通过以下方式解决messages.checkChatInvite - FLOOD_等待重试 --当Telegram速率限制客户端时,自动休眠并重试(最多3次)
- 认证警卫 --在Telegram身份验证完成之前,工具调用将被阻止,并显示一个明确的错误
- 分页 —
offsetDate对于对话列表,offsetId用于消息搜索和历史记录
工具(59)
留言(11)
tg_messages_list--列出聊天中的消息tg_messages_get--按ID获取特定消息tg_messages_context--获取围绕特定消息的消息tg_messages_search--在聊天中搜索消息tg_messages_send--发送短信tg_messages_edit--编辑现有邮件tg_messages_delete--删除邮件tg_messages_forward--在聊天之间转发消息tg_messages_pin--固定或取消固定消息tg_messages_react--添加或删除反应tg_messages_mark_read--将邮件标记为已读
对话(3)
tg_dialogs_list--列出所有对话框tg_dialogs_search--按查询搜索对话框tg_dialogs_get_info--获取聊天/频道元数据
联系人和用户(6)
tg_contacts_get--获取联系信息tg_contacts_search--搜索联系人tg_users_get--获取用户信息tg_users_get_photos--获取用户个人资料照片tg_users_block--阻止或取消阻止用户tg_users_get_common_chats--获取与用户共享的聊天记录
团体(9)
tg_groups_list--列出组tg_groups_info--获取群组信息tg_groups_join--加入公共频道或超级团体tg_groups_leave--离开群组或频道tg_groups_rename--重命名组tg_groups_members_add--添加成员tg_groups_members_remove--删除成员tg_groups_invite_link_get--获取邀请链接tg_groups_invite_link_revoke--撤销邀请链接
聊天管理(8)
tg_chats_create--创建新组或频道tg_chats_archive--存档或取消存档聊天记录tg_chats_mute--将通知静音或取消静音tg_chats_delete--删除频道或超级组tg_chats_set_photo--设置聊天照片tg_chats_set_description--设置聊天描述tg_chats_get_admins--列出管理员(频道/超级组)tg_chats_set_permissions--设置默认权限
媒体和文件(4)
tg_messages_send_file--发送带有标题的文件tg_media_download--从邮件中下载媒体tg_media_upload--上传文件tg_media_send_album--发送媒体相册
个人资料(4)
tg_profile_get--获取自己的个人资料信息tg_profile_set_name--更新显示名称tg_profile_set_bio--更新个人简介tg_profile_set_photo--设置个人资料照片
论坛主题(2)
tg_topics_list--列出论坛主题tg_topics_search--搜索论坛主题
贴纸(3)
tg_stickers_search--搜索贴纸集tg_stickers_get_set--获取贴纸套装tg_stickers_send--发送贴纸
草稿(2)
tg_drafts_set--设置消息草稿tg_drafts_clear--清除草稿
文件夹(4)
tg_folders_list--列出聊天文件夹tg_folders_create--创建文件夹tg_folders_edit--编辑文件夹tg_folders_delete--删除文件夹
状态(2)
tg_typing_send--发送打字指示器tg_online_status_set--设置在线/离线状态
服务器(1)
tg_server_version--获取构建元数据(semver标签、git commit SHA、Go运行时版本);在身份验证完成之前可访问
Markdown——已知限制
通过以下方式支持CommonMark子集 parseMode: "commonmark" 涵盖了大多数日常格式,但有少数CommonMark规范功能故意没有实现。每个都被捕获为注释掉的测试 internal/telegram/markdown_audit_test.go 准备在工作开始时畅通无阻。
- 嵌套区块行情 (
> > x).内部>被视为外部块引用的文字内容,而不是产生嵌套级别。Telegram呈现任何深度>由于视觉上只有一个报价栏,因此实际损失很小。 - 嵌套强调 (
**bold *italic***).内部斜体被删除,星号保留为文字字符。实现CommonMark§6.4中的完整定界符运行算法将是对内联解析器的重写。 - 硬线通过两个尾随空格中断或
\(CommonMark§6.7)。Telegram没有break实体;一片平原\n已经渲染为换行符。当用户不打算进行硬中断时,删除尾随空格将是无声的数据损坏,因此解析器会原封不动地传递这两个表单。
资源
tg://dialogs--所有对话框列表(JSON)tg://profile--经过身份验证的用户配置文件(JSON)tg://chat/{peer}--聊天/频道元数据(JSON,URI模板)tg://chat/{peer}/messages--最近的消息(文本、URI模板)
提示
reply_to_message--获取消息周围的上下文以撰写回复summarize_chat--获取最新消息以进行对话摘要search_and_reply--搜索邮件并准备回复上下文
对等解决方案
所有工具均接受 peer 作为字符串。支持的格式:
@usernameusername(裸)https://t.me/usernamehttps://t.me/+invite_hash(邀请链接,如果已经加入)- 数字ID(bot-API样式:阳性=用户,阴性=聊天,
-100xxx=频道)
按用户名解析的对等体包含有效的访问哈希。数字ID使用缓存的访问哈希(如果可用),否则AccessHash=0(某些API调用可能失败-首选 @username).
配置
| 变量 | 描述 | 默认值 | 必填 |
|---|---|---|---|
TELEGRAM_APP_ID | 来自my.telegram.org的API app_id | - | 是 |
TELEGRAM_APP_HASH | API app_hash来自my.telegram.org | - | 是 |
TELEGRAM_PHONE | 电话号码(E.164格式) | -- | 否(通过启发式提示) |
TELEGRAM_PASSWORD | 2FA密码 | -- | 否(通过诱导提示) |
TELEGRAM_SESSION_FILE | 会话文件路径 | ~/.mcp-tg/session.json | 没有 |
TELEGRAM_AUTH_CODE | 一次性身份验证码 | -- | 否(通过启发提示) |
TELEGRAM_DOWNLOAD_DIR | 媒体下载目录 | /tmp/mcp-tg/downloads | 没有 |
MCP_HTTP_PORT | HTTP/SSE传输端口 | 已禁用 | 否 |
MCP_HTTP_HOST | HTTP绑定地址 | 127.0.0.1 | 没有 |
认证
身份验证使用级联:环境变量,然后是MCP启发(客户端提示您),然后是错误。
第一轮:
- 集
TELEGRAM_APP_ID和TELEGRAM_APP_HASH(始终需要) - 可选设置
TELEGRAM_PHONE--如果未设置,服务器将通过启发进行询问 - Telegram向您的设备发送代码
- 可选设置
TELEGRAM_AUTH_CODE--如果未设置,服务器将通过启发进行询问 - 如果启用了2FA,则可选择设置
TELEGRAM_PASSWORD--或者服务器询问 - 会话已保存到
TELEGRAM_SESSION_FILE
后续运行: 会话文件是自动加载的,不需要身份验证。
容器中的会话持久性: 为会话文件挂载一个卷:
-v ~/.mcp-tg:/home/nobody/.mcp-tg多个会话: 每个Claude Code会话都会启动自己的容器。这对于正常使用是安全的——Telegram允许使用相同的身份验证密钥进行多个MTProto连接。但是,请避免同时运行多个实例(5+),因为Telegram可能会限制速率或断开连接。会话文件写入很少(仅在重新授权或DC迁移时),因此卷共享在实践中是安全的。
用法
使用Claude Code(通过Docker进行stdio)
claude mcp add mcp-tg -- docker run --rm -i \
-e TELEGRAM_APP_ID \
-e TELEGRAM_APP_HASH \
-v ~/.mcp-tg:/home/nobody/.mcp-tg \
ghcr.io/lexfrei/mcp-tg:latest直接二进制
export TELEGRAM_APP_ID=12345
export TELEGRAM_APP_HASH=your_app_hash
./mcp-tg容器
docker run --rm -i \
-e TELEGRAM_APP_ID=12345 \
-e TELEGRAM_APP_HASH=your_app_hash \
-v ~/.mcp-tg:/home/nobody/.mcp-tg \
ghcr.io/lexfrei/mcp-tg:latest需求
- 转到1.26.1+
- 电报API凭证来自 my.telegram.org
建筑
go build ./cmd/mcp-tgdocker build --file Containerfile --tag mcp-tg .许可证
BSD 3条款许可
