Cloudflare员工的Telegram MCP服务器
⚠️ 安全警告:此服务器当前未为MCP客户端实现OAuth或身份验证。部署后,任何有权访问您的工作URL的人都可以通过MCP工具访问您的Telegram帐户。 在部署到生产环境之前,必须添加OAuth身份验证 以防止未经授权访问您的私人Telegram内容。使用 AUTH_SECRET_PATH 作为临时安全措施,但要为生产使用实现适当的OAuth。一种模型上下文协议(MCP)服务器,为AI代理提供对Telegram消息传递功能的完全访问。使用gramjs构建,旨在使用持久对象在Cloudflare Workers上运行,以实现状态持久性。
特性
- 完整电报API访问:发送消息、阅读对话、管理聊天、下载媒体
- 100+MCP工具:7个类别的全面Telegram集成
- 认证:支持2FA的基于Web的电话代码验证流程
- Cloudflare员工:使用耐用对象在边缘运行,用于会话存储
- 淋ORM:使用SQLite进行类型安全的数据库操作
- 媒体缓存:通过URL提供的下载媒体(无base64上下文重载)
- 无文件系统:基于内存缓冲区的媒体处理,以实现Workers兼容性
MCP工具
服务器提供 100+工具 分为7类:
聊天和群管理(17个工具)
get_dialogs-使用过滤器获取分页聊天列表get_chat_info-获取详细聊天信息create_group-创建新的群聊create_channel-创建频道或超群leave_chat-离开群组或频道add_chat_members-将成员添加到聊天室remove_chat_member-从聊天中删除成员archive_chat/unarchive_chat-档案管理- 还有更多。..
消息传递(15个工具)
send_message-发送带有可选回复/文件的短信get_messages-使用高级过滤功能获取邮件edit_message-编辑已发送的消息delete_message-删除一条或多条消息forward_messages-在聊天之间转发消息search_messages-使用筛选器搜索邮件pin_message/unpin_message-消息固定mark_as_read-将邮件标记为已读- 还有更多。..
媒体处理(7个工具)
download_media-将媒体下载为缓存的URL(不是base64!)send_file-将文件发送到聊天室send_voice-发送语音信息send_sticker-发送贴纸send_gif-发送GIF动画get_media_info-获取媒体元数据get_gif_search-搜索GIF
联系人管理(14个工具)
list_contacts-列出所有联系人search_contacts-搜索联系人add_contact/delete_contact-联系人管理block_user/unblock_user-用户屏蔽get_blocked_users-列出被阻止的用户import_contacts/export_contacts-批量操作get_me-获取当前用户信息- 还有更多。..
组管理(15个工具)
get_participants-使用筛选器获取聊天参与者get_admins-获取管理员invite_to_group-邀请用户promote_admin/demote_admin-行政管理ban_user/unban_user-用户审核edit_chat_title/edit_chat_photo-聊天定制get_invite_link-获取/创建邀请链接- 还有更多。..
个人资料和隐私(8个工具)
update_profile-更新用户配置文件set_profile_photo/delete_profile_photo-个人资料照片get_privacy_settings/set_privacy_settings-隐私控制mute_chat/unmute_chat-通知控制list_topics-论坛主题- 还有更多。..
搜索与发现(6个工具)
search_dialogs-搜索聊天记录和用户search_global-全球电报搜索message_from_link-解析电报链接resolve_username-解析用户名- 还有更多。..
设置
1.获取Telegram API证书
- 首选https://my.telegram.org/apps
- 使用您的电话号码登录
- 创建新应用程序
- 保存您的
API ID和API Hash
2.配置环境变量
创建一个 .dev.vars 文件(复制自 .dev.vars.example):
cp .dev.vars.example .dev.vars编辑 .dev.vars 使用您的凭据:
TELEGRAM_API_ID=your_api_id_here
TELEGRAM_API_HASH=your_api_hash_here
TELEGRAM_PHONE=+1234567890
AUTH_SECRET_PATH=telegram-auth-secret-change-me重要:更改 AUTH_SECRET_PATH 为了安全起见,将其转换为随机字符串。
3.安装依赖项
npm install4.启动开发服务器
npm run dev服务器将在以下时间启动 http://localhost:8787
5.使用Telegram进行身份验证
- 访问
http://localhost:8787/your-secret-path(使用你的AUTH_SECRET_PATH) - 点击“开始身份验证”
- 检查您的Telegram应用程序的验证码
- 在web UI中输入代码
- 如果您启用了2FA,请同时输入密码
一旦通过身份验证,会话将保存在Durable Object的SQLite数据库中,并在重新启动时持续存在。
部署
⚠️ 部署前:实现OAuth身份验证以保护您的Telegram帐户。当前实现仅使用 AUTH_SECRET_PATH 这对于生产安全来说是不够的。部署到Cloudflare Workers
- 在Cloudflare中设置机密:
wrangler secret put TELEGRAM_API_ID
wrangler secret put TELEGRAM_API_HASH
wrangler secret put TELEGRAM_PHONE- 更新
AUTH_SECRET_PATH在wrangler.jsonc变成一个长而随机的字符串
- 部署:
npm run deploy- 通过访问进行身份验证:
https://your-worker.workers.dev/your-secret-path
用法
使用克劳德桌面
添加到您的Claude Desktop配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"telegram": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8787/mcp"
]
}
}
}对于生产环境,请使用您部署的worker URL:
{
"mcpServers": {
"telegram": {
"command": "npx",
"args": [
"mcp-remote",
"https://your-worker.workers.dev/mcp"
]
}
}
}📝 备注:端点为/mcp,不/sse服务器通过以下方式使用标准MCP协议createMcpHandler.
重新启动Claude Desktop,Telegram工具将可用。
与其他MCP客户端
配置您的MCP客户端以连接到:
- 本地:
http://localhost:8787/mcp - 生产:
https://your-worker.workers.dev/mcp
API终点
/-根信息页面/mcp-MCP协议端点(用于MCP客户端)/{AUTH_SECRET_PATH}-身份验证web UI/{AUTH_SECRET_PATH}/status-获取身份验证状态(JSON)/{AUTH_SECRET_PATH}/start-启动身份验证流(POST)/{AUTH_SECRET_PATH}/verify-提交验证码(POST)/{AUTH_SECRET_PATH}/clear-清除会话(POST)/media/{uuid}-提供缓存的媒体文件
发展
类型检查
npm run type-check格式码
npm run format棉绒和修复
npm run lint:fix生成Cloudflare类型
npm run cf-typegen建筑
┌─────────────────────────────────────────────────────────┐
│ Cloudflare Worker (Proxy) │
│ │
│ Routes requests to Durable Object: │
│ - /mcp → DO │
│ - /{AUTH_SECRET_PATH}/* → /auth/* (rewritten to DO) │
│ - /media/* → DO │
└────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ TelegramMCPSession Durable Object │
│ ┌───────────────────────────────────────────────────┐ │
│ │ TelegramClientWrapper (gramjs) │ │
│ │ - StringSession persistence │ │
│ │ - Authentication flow │ │
│ │ - Telegram API calls │ │
│ └───────────────────────────────────────────────────┘ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ Drizzle ORM + SQLite (DO Storage) │ │
│ │ - Session storage │ │
│ │ - Auth state tracking │ │
│ └───────────────────────────────────────────────────┘ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ MCP Server (100+ tools) │ │
│ │ - createMcpHandler integration │ │
│ │ - All tools registered on initialization │ │
│ └───────────────────────────────────────────────────┘ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ Media Cache (Map) │ │
│ │ - In-memory media storage │ │
│ │ - 1-hour expiration │ │
│ │ - Served via /media/{uuid} │ │
│ └───────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
Claude Desktop Custom MCP Client Direct HTTP技术细节
会话管理
- 使用gramjs
StringSession用于会话持久性 - 会话字符串通过Drizzle ORM存储在Durable Objects SQLite数据库中
- 单个全局持久对象实例(
telegram-mcp-global) - 在工人重新启动和重新部署后幸存下来
媒体下载
- 无文件系统:媒体直接作为内存中的缓冲区下载
- 存储在
mediaCache带UUID键的映射 - 通过以下方式提供服务
/media/{uuid}URL(不是base64!) - 1小时后自动过期
- 防止LLM的上下文过载
- 适用于所有Telegram媒体类型(照片、视频、文档、语音)
认证流程
- 服务器启动→ 检查数据库中的现有会话
- 如果没有会话→ 用户访问auth UI
/{AUTH_SECRET_PATH} - Auth UI触发手机代码发送
- 用户输入代码(和可选的2FA密码)
- 会话字符串已保存到数据库
- 客户端保持身份验证
耐用对象架构
所有国家都生活在 TelegramMCPSession 耐用物体:
- 电报客户端:无法序列化,必须留在DO内
- MCP服务器:在初始化过程中创建一次
- 媒体缓存:下载媒体的内存映射
- 数据库:在SQLite背衬下喷洒ORM
主worker只是一个简单的代理,它将请求路由到Durable Object。
Node.js兼容性
工人与 nodejs_compat 为Buffer支持和gramjs兼容性启用了标志。
故障排除
“客户端未初始化”错误
通过访问auth UI确保您已通过身份验证 /{AUTH_SECRET_PATH}
“缺少Telegram凭据”错误
检查你的 .dev.vars 该文件设置了所有必需的变量,或者在Cloudflare中配置了用于生产的机密。
认证失败
- 从my.telegram.org中双击您的API ID和API哈希
- 确保电话号码包括国家代码(例如。,
+1234567890) - 如果您启用了2FA,请确保输入密码
会话到期
通过访问auth UI重新进行身份验证。新会话将自动保存。
媒体下载返回404
媒体URL将在1小时后过期。再次下载媒体以获取新的URL。
409/mcp上的冲突错误
这在早期版本中是一个问题。当前实施使用 createMcpHandler 其适当地管理传输状态。
安全考虑
🚨 关键的:部署到生产环境之前:
- 实现OAuth:添加适当的OAuth身份验证以保护
/mcp端点 - 安全AUTH_SECRET_PATH:使用长随机字符串(不是默认值!)
- 速率限制:考虑增加费率限制以防止滥用
- IP白名单:考虑限制对已知IP的访问
- 审计日志:考虑记录所有MCP工具调用以进行安全审计
当前的实施通过以下方式提供基本安全 AUTH_SECRET_PATH 但这是 不足以生产 任何具有工作者URL的人都可以访问您的Telegram帐户。
许可证
麻省理工学院
______________________________________________________________________
免责声明:这是一个按原样提供的开源项目。用户有责任在部署到生产环境之前实施适当的安全措施。作者不对未经授权访问或滥用已部署实例负责。
