关于 MCP Telegram
这是一个基于 MTProto 的 Telegram MCP 服务,以真实用户账号而非机器人的身份登录,供 Claude、Cursor、VS Code 等 MCP 客户端使用。它提供 100 多个工具,可读取、搜索、发送消息,并管理频道、故事、联系人和文件夹。登录通过本地浏览器完成,会话保存在本地目录中。
主要功能
- 01基于 MTProto 的真实用户账号登录,无需机器人
- 02读取、搜索与发送消息,支持跨会话全局搜索
- 03频道与群组管理,包括封禁、权限、邀请链接和管理日志
- 04故事、联系人、草稿、通知与文件夹管理
- 05通过 invoke_mtproto 调用任意原始 MTProto 方法
适用场景
- 01让智能体按关键词搜索 Telegram 历史消息并汇总内容
- 02批量管理频道设置、管理员权限与邀请链接
- 03转写语音消息或下载消息中的媒体文件
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露 Telegram 用户账号的消息、媒体、频道管理等工具。会话保存在 ~/.telegram-agent/ 目录中,需妥善保管。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
111收录的工具列表 · 更新于 3 周前
此工具无需参数。
详细介绍
mcp-telegram
适用于 Claude、Codex、Cursor、Claude Code、VS Code、Cline、Windsurf 及其他 MCP 客户端的 Telegram MCP 服务。通过 MTProto 使用真实的 Telegram 用户账号,基于浏览器在本地登录,提供 100 多种工具。需要延迟加载并降低上下文开销?请查看基于技能的配套项目 telegram-agent。
一个 Model Context Protocol(MCP)服务,通过 MTProto 将 Claude Desktop、Codex CLI、Cursor、Claude Code、VS Code、Cline、Windsurf、Goose 及任何其他兼容 MCP 的客户端连接到真实的 Telegram 用户账号,让你的 Agent 可以通过聊天或自动化工具调用来读取、搜索、发送、管理和维护 Telegram 聊天,而不必在 Telegram 界面中逐一点击。
**可用于:**读取对话并全局搜索消息 · 发送/编辑/转发/回应/发起投票 · 下载媒体并转录语音留言 · 管理频道(封禁/限制/提升权限、邀请链接、慢速模式、管理员日志、论坛话题)· 管理动态、联系人、草稿、通知、文件夹、隐私 · 或使用原始 MTProto 桥接处理其他任何事项。所有操作均通过一个已登录的用户账号进行,无需机器人。
警告
此服务以真实的 Telegram 用户身份(而非机器人)登录。会话存储在
~/.telegram-agent/中。请像保护密码一样保护此目录。
先决条件
- Node.js
>=20 - 从 my.telegram.org/apps 获取 Telegram API 凭据:
api_id和api_hash
想要更轻量的传输方式?
此软件包是 MCP 服务——每轮对话中,所有工具的 schema(约 12,700 个 token)都会占用 Agent 的上下文。它适用于任何 MCP 客户端,也适用于无法执行 shell 命令的托管运行时。
如果你的 Agent 是 Claude Code / Codex CLI / Cursor / Gemini CLI / Cline / Windsurf,可以使用配套软件包 telegram-agent,它将相同的 Telegram 功能作为通用 Agent 技能提供。只有当提示词提及 Telegram 时,Agent 才会加载技能说明——空闲时上下文开销降低约 50 倍。它可独立运行(无需 MCP 服务参与),但与此软件包共用 ~/.telegram-agent/ 会话存储——登录一次,即可任选其一或同时使用两者。
npm i -g telegram-agent
telegram-agent login
npx skills add beautyfree/telegram-agent -a claude-code -g
MCP 安装方式请见下文。
安装
选项 A——自动配置所有客户端:
npx add-mcp mcp-telegram \
--env TELEGRAM_API_ID=123456 \
--env TELEGRAM_API_HASH=abc...
add-mcp(来自 Neon)会为 Claude Desktop、Claude Code、Cursor、VS Code、Codex、Gemini CLI、Cline、Zed、Goose、OpenCode 等客户端写入正确的配置。请在交互式提示中选择客户端。
重要
两个环境变量均为必填项。请从 my.telegram.org/apps 获取。
选项 B——手动配置:
Claude Desktop(claude_desktop_config.json)
{
"mcpServers": {
"telegram": {
"command": "npx",
"args": ["-y", "mcp-telegram"],
"env": {
"TELEGRAM_API_ID": "123456",
"TELEGRAM_API_HASH": "abc..."
}
}
}
}
Cursor(~/.cursor/mcp.json)
{
"mcpServers": {
"telegram": {
"command": "npx",
"args": ["-y", "mcp-telegram"],
"env": {
"TELEGRAM_API_ID": "123456",
"TELEGRAM_API_HASH": "abc..."
}
}
}
}
VS Code(.vscode/mcp.json)
{
"servers": {
"telegram": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-telegram"],
"env": {
"TELEGRAM_API_ID": "123456",
"TELEGRAM_API_HASH": "abc..."
}
}
}
}
Claude Code
claude mcp add telegram \
-e TELEGRAM_API_ID=123456 \
-e TELEGRAM_API_HASH=abc... \
-- npx -y mcp-telegram
Codex CLI(~/.codex/config.toml)— 安装
[mcp_servers.telegram]
command = "npx"
args = ["-y", "mcp-telegram"]
env = { TELEGRAM_API_ID = "123456", TELEGRAM_API_HASH = "abc..." }
向你的 Agent 询问:
登录我的 Telegram。
Agent 会调用 login 工具。浏览器标签页会打开。输入你的电话号码、短信验证码,以及(如果设置了)2FA 密码。标签页会显示绿色勾号,此时可以关闭它。会话现已存储在本地,Agent 可以读取你的 Telegram。
若要添加另一个账号,请让 Agent 再次调用 login。
工具
102 个工具,覆盖 Telegram 用户账号的全部功能。下面列出常用工具,其余工具归类在可折叠区域中。每个工具都接受可选的 accountId(如果只登录了一个账号,则可省略)。peer 接受数字聊天 ID、@username 或字面值 "me"(已保存的消息)。
菜单顶部:
| 工具 | 功能 |
|---|---|
login | 打开基于浏览器的登录流程。添加账号。 |
list_accounts | 列出已登录的账号。 |
list_dialogs | 列出对话/聊天/频道。筛选条件:unread、archived、ignorePinned、folder、limit。 |
list_messages | 列出对话中的消息。按时间从新到旧排列。 |
search_messages | 在一个对话中搜索:query、filter(照片/视频/URL/语音/……)、fromUser、日期范围。 |
search_global | 搜索你参与的所有聊天。 |
search_dialogs | 按名称/标题/用户名子字符串查找对话。 |
send_message | 发送文本。支持 replyTo、topMsgId、parseMode、schedule、silent。 |
send_file | 发送文件(本地路径或 https:// URL)。传入数组即可发送相册。 |
download_media | 将消息中的媒体保存到磁盘。 |
transcribe_message | 转录语音/视频留言(Premium)。 |
invoke_mtproto | 按名称调用任意原始 MTProto 方法。自动解析 peer/channel/user 字符串。 |
会话(本地)(4)
这些工具仅在本地运行:它们管理存储在 ~/.telegram-agent/ 中的 Telegram 会话和设置界面。除登录流程本身外,不会调用 Telegram API。
| 工具 | 功能 |
|---|---|
list_accounts | 列出已登录的账号。 |
login | 基于浏览器登录。添加账号。 |
logout | 删除本地会话并在 Telegram 上撤销该会话。 |
open_settings | 打开本地设置页面(仅限工具界面,且为只读)。 |
个人资料(5)
| 工具 | 功能 |
|---|---|
get_me | 返回已认证用户的个人资料。 |
update_profile | 更改自己的名字、姓氏和个人简介。 |
update_my_username | 设置或清除自己的 @username。 |
set_birthday | 设置账号生日。 |
set_profile_photo | 上传新的头像(本地路径或 URL)。 |
对话发现(5)
| 工具 | 功能 |
|---|---|
list_dialogs | 列出对话。筛选条件:unread、archived、ignorePinned、folder、limit。 |
search_dialogs | 按名称/标题/用户名子字符串查找对话。 |
resolve_username | 将 @username 解析为用户/频道/聊天实体。 |
list_folders | 列出自定义对话文件夹(聊天筛选器)。 |
list_contacts | 列出联系人。 |
消息 — 读取与搜索(6)
| 工具 | 功能 |
|---|---|
list_messages | 列出对话中的消息。 |
search_messages | 在一个对话中搜索(文本、类型筛选、发送者、日期范围)。 |
search_global | 搜索所有聊天。 |
get_message | 按 ID 获取一条或多条消息。 |
get_message_reactions | 获取消息上的回应。 |
mark_as_read | 将消息标记为已读,直到指定 ID。 |
消息 — 写入(8)
| 工具 | 功能 | | --- | --- | | `send_message` | 发送文本。 | | `edit_message` | 编辑之前发送的消息。 | | `delete_messages` | 按 ID 删除(可选为所有人撤回)。 | | `forward_messages` | 在对话之间转发消息。 | | `pin_message` / `unpin_message` | 在对话中置顶 / 取消置顶。 | | `send_reaction` | 为消息设置回应。 | | `send_message_to_phone` | 向电话号码发送消息,并自动创建临时联系人。 |媒体 (4)
| 工具 | 功能 |
|---|---|
send_file | 发送文件(路径或 URL)。通过数组发送相册。 |
download_media | 将消息中的媒体保存到磁盘。 |
download_profile_photo | 将用户头像保存到磁盘。 |
transcribe_message | 转写语音 / 视频(Premium)。 |
投票 (4)
| 工具 | 功能 |
|---|---|
send_poll | 发送投票。支持测验、多选、匿名投票和设置结束时间。 |
vote_poll | 投票。 |
close_poll | 结束投票。 |
get_poll_results | 获取投票统计结果。 |
回应 (3)
| 工具 | 功能 |
|---|---|
send_reaction | 为消息设置表情回应。 |
get_message_reactions | 查看回应。 |
set_default_reaction | 设置账户级默认回应。 |
快拍 (6)
| 工具 | 功能 |
|---|---|
list_stories | 获取联系人的快拍动态。 |
get_peer_stories | 获取某位用户的快拍。 |
send_story | 发布快拍(照片或视频)。 |
delete_story | 删除自己的快拍。 |
view_story | 标记快拍为已查看。 |
get_story_viewers | 列出查看过你快拍的用户。 |
频道 / 群组管理 (11)
| 工具 | 功能 |
|---|---|
ban_user | 完全封禁(可选 untilDate)。 |
unban_user | 解除限制。 |
restrict_user | 应用自定义权限掩码。 |
promote_admin | 授予管理员权限(并设置头衔)。 |
demote_admin | 撤销管理员权限。 |
invite_user | 将用户添加到频道 / 超级群组。 |
kick_participant | 将成员移出群组 / 频道。 |
get_participant | 获取单个成员的信息。 |
list_participants | 按筛选条件(管理员 / 已封禁用户 / 机器人 /……)和子串搜索列出成员。 |
delete_user_history | 删除某位用户发送的所有消息。 |
get_admin_log | 按事件类型筛选近期管理员操作。 |
频道 / 群组设置 (12)
| 工具 | 功能 |
|---|---|
edit_title | 更改标题(适用于频道、超级群组和普通群组)。 |
edit_about | 更改描述。 |
edit_photo | 更改头像(路径或 URL)。 |
update_username | 设置 / 清除公开的 @username。 |
check_username | 检查用户名是否可用。 |
set_slow_mode | 设置慢速模式的秒数。 |
toggle_signatures | 设置是否在频道帖子中显示作者签名。 |
toggle_pre_history_hidden | 对新成员隐藏历史记录。 |
toggle_join_request | 设置加入时是否需要管理员批准。 |
leave_channel | 离开频道 / 超级群组。 |
get_channel_info | 获取扩展信息(简介、人数、关联群组、慢速模式)。 |
get_user_info | 获取扩展用户信息(简介、共同群组)。 |
频道 / 群组生命周期 (4)
| 工具 | 功能 |
|---|---|
create_channel | 创建新的广播频道或超级群组(可选论坛模式)。 |
delete_channel | 永久删除。 |
migrate_chat | 普通群组 → 超级群组。 |
transfer_ownership | 转让创建者权限(需要 2FA 密码)。 |
邀请链接 (4)
| 工具 | 功能 |
|---|---|
create_invite_link | 创建新链接,可设置有效期、使用人数上限和加入申请审核。 |
list_invite_links | 列出有效或已撤销的链接。 |
revoke_invite_link | 撤销指定链接。 |
list_invite_joiners | 列出通过链接加入的用户。 |
论坛主题(3)
| 工具 | 功能 |
|---|---|
list_topics | 列出论坛主题。 |
create_topic | 创建新主题。 |
edit_topic | 重命名、更换图标、关闭、隐藏。 |
草稿(3)
| 工具 | 功能 |
|---|---|
save_draft | 为对话保存草稿。 |
clear_draft | 删除对话草稿。 |
list_drafts | 列出所有对话草稿。 |
通知(4)
| 工具 | 功能 |
|---|---|
mute_peer | 将聊天设为静音(可选 untilDate)。 |
unmute_peer | 取消静音。 |
get_notify_settings | 读取设置。 |
set_notify_settings | 更新静音、预览、声音和动态静音设置。 |
文件夹(聊天筛选器)(4)
| 工具 | 功能 |
|---|---|
create_folder | 创建包含规则和排除规则的新文件夹。 |
edit_folder | 替换文件夹规则。 |
delete_folder | 删除文件夹。 |
reorder_folders | 设置显示顺序。 |
联系人(4)
| 工具 | 功能 |
|---|---|
list_contacts | 列出所有联系人。 |
add_contact | 将用户添加到联系人。 |
delete_contact | 从联系人中移除用户。 |
search_contacts | 搜索联系人和全局目录。 |
隐私与屏蔽(5)
| 工具 | 功能 |
|---|---|
block_user / unblock_user | 屏蔽 / 取消屏蔽。 |
list_blocked | 屏蔽列表。 |
get_privacy | 读取隐私键。 |
set_privacy | 更新隐私键(模式 + 允许/禁止列表)。 |
贴纸(3)
| 工具 | 功能 |
|---|---|
get_my_stickers | 获取已安装的贴纸集。 |
install_sticker_set | 按短名称安装。 |
add_recent_sticker | 将贴纸固定到最近使用列表。 |
Premium 加成(2)
| 工具 | 功能 |
|---|---|
get_my_boosts | 列出你的加成名额。 |
apply_boost | 将名额应用到频道。 |
机器人与原始 MTProto(2)
| 工具 | 功能 |
|---|---|
get_inline_bot_results | 运行内联机器人查询。 |
invoke_mtproto | 按限定名称调用任意 MTProto 方法(例如 messages.SendMessage、stories.GetAllStories)。peer/channel/user/fromPeer/toPeer/bot/chat 的字符串值会自动解析为 InputPeer / InputUser。 |
控制开放的工具
三个环境变量,按顺序应用:
| 变量 | 作用 |
|---|---|
MCP_TELEGRAM_READONLY=1 | 隐藏所有具有破坏性 / 修改性的工具。 |
MCP_TELEGRAM_TOOLS=name1,name2,prefix* | 严格允许列表——仅注册这些工具。 |
MCP_TELEGRAM_DISABLE=name1,prefix* | 在允许列表之后应用禁止列表。 |
示例:
MCP_TELEGRAM_READONLY=1 # read-only agent
MCP_TELEGRAM_TOOLS='login,list*,search*,get*' # discovery-only
MCP_TELEGRAM_DISABLE='delete*,ban*,kick*,create_channel,delete_channel,transfer_ownership,invokeMtproto' # safer write set
环境
| 变量 | 必需 | 默认值 | 备注 |
|---|---|---|---|
TELEGRAM_API_ID | 是 | — | 来自 my.telegram.org/apps。若未设置,身份验证页面会提示输入并将其保存到 state.json。 |
TELEGRAM_API_HASH | 是 | — | 同上。 |
TELEGRAM_AGENT_HOME | 否 | ~/.telegram-agent | 状态数据 + 每个账号的会话存储。仍接受旧版 MCP_TELEGRAM_HOME。如果之前安装留下了 ~/.mcp-telegram,则会自动使用。 |
TELEGRAM_AGENT_DOWNLOADS | 否 | $TELEGRAM_AGENT_HOME/downloads | download_media / download_profile_photo 保存文件的位置。仍接受旧版 MCP_TELEGRAM_DOWNLOADS。 |
MCP_TELEGRAM_READONLY | 否 | — | 设置为 1/true/yes 可隐藏所有具有破坏性的工具。 |
MCP_TELEGRAM_TOOLS | 否 | — | 严格允许列表。以逗号分隔的工具名称;支持 prefix* 通配符。设置后,未匹配的工具都会被隐藏。 |
MCP_TELEGRAM_DISABLE | 否 | — | 在允许列表之后应用禁止列表。语法相同。 |
LOG_LEVEL | 否 | info | 使用 debug 可在 stderr 输出详细信息。 |
选择 Agent 可见的工具
这三个门控变量依次生效:MCP_TELEGRAM_READONLY → MCP_TELEGRAM_TOOLS → MCP_TELEGRAM_DISABLE。
# Read-only agent — every mutating tool is hidden
MCP_TELEGRAM_READONLY=1
# Discovery-only — only login + the list/search/get tools
MCP_TELEGRAM_TOOLS='login,list*,search*,get*,resolveUsername'
# Allow writes but keep destructive ones away from the agent
MCP_TELEGRAM_DISABLE='delete*,ban*,kick*,create_channel,delete_channel,transfer_ownership,invokeMtproto'
# Specific surface: read + send/edit only
MCP_TELEGRAM_TOOLS='login,list_accounts,list_dialogs,list_messages,search_messages,search_global,send_message,editMessage'
在 MCP 客户端配置中,将这些变量加入与 TELEGRAM_API_ID/TELEGRAM_API_HASH 相同的 env 块。若要验证,请重新打开客户端——服务器公布的工具,正是门控生效后注册的工具。
数据布局
~/.telegram-agent/
├── state.json known accounts (no secrets in here)
└── sessions/
└── <account_id>/ per-account MTProto session
如果 Telegram 会话在服务器端失效(在另一台设备上退出登录、密码轮换等),下一次工具调用会返回错误,提示 Agent 调用 login 重新授权。
开发
git clone https://github.com/beautyfree/mcp-telegram
cd mcp-telegram
npm install
echo "TELEGRAM_API_ID=...\nTELEGRAM_API_HASH=..." > .env
npm run dev
布局:
src/
├── index.ts bin entry — stdio MCP server, tool registrations
├── telegram.ts MTProto client + login state machine
├── auth-browser.ts ephemeral HTTP server that drives the browser flow
├── auth-page.ts inline HTML for the auth page
├── state.ts persistent state in ~/.telegram-agent/
└── logger.ts
许可证
MIT — 请参阅 LICENSE。
其他名称
Telegram MCP · MCP Telegram · Telegram MCP server · Telegram for Claude · Telegram for Cursor · Telegram for Claude Code · Telegram for VS Code · Telegram for Codex · Telegram for Cline · Telegram for Windsurf · Telegram for AI agents · Telegram MTProto MCP · Telegram user-account MCP · Telegram automation MCP · Model Context Protocol Telegram · MCP server Telegram · gramjs MCP
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。