mcpField
A
aiogram-mcp

aiogram-mcp

本地服务
github.com/Py2755通信协作332 周前更新

关于 aiogram-mcp

aiogram-mcp 将现有 aiogram Telegram 机器人转换为供 AI 客户端使用的 MCP 服务。它提供消息、审核、交互键盘、资源、提示词和事件推送,并支持配置权限与审计日志。

主要功能

  1. 01提供 30 个消息与审核工具
  2. 02支持带内联键盘的交互消息
  3. 03提供 7 个资源和 3 个工作流提示词
  4. 04推送 Telegram 实时事件通知
  5. 05权限级别与聊天范围限制
  6. 06速率限制和可选审计日志

适用场景

  1. 01通过现有机器人发送消息和媒体
  2. 02创建 Telegram 菜单并处理按钮点击
  3. 03无需轮询即可接收筛选后的聊天事件
  4. 04限制 Agent 权限并审查工具调用记录

MCP 相关

它与 aiogram 机器人并行运行,将机器人操作作为 MCP 工具、资源和提示词提供。支持 stdio 和 SSE 传输,并可向 MCP 客户端推送订阅的事件通知。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"py2755-aiogram": {
"command": "uvx",
"args": [
"aiogram-mcp"
],
"env": {
"BOT_TOKEN": "<BOT_TOKEN>"
}
}
}
}
启动命令uvx aiogram-mcp
需要配置的环境变量
BOT_TOKEN密钥Telegram Bot API token from @BotFather

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiaiogram-mcp0.7.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

aiogram-mcp

CI Python 3.10+ License: MIT PyPI version MCP Registry

通过模型上下文协议将你的 Telegram 机器人连接到 AI Agent。

aiogram-mcp 可将任意 aiogram 机器人变成 MCP 服务。随后,Claude Desktop 等 AI 客户端便可通过你现有的机器人发送消息、读取聊天记录、创建交互式菜单并实时响应事件,无需重写任何处理程序。

为什么选择 aiogram-mcp?

大多数 Telegram MCP 服务都只是包含 3-5 个工具的简单封装。aiogram-mcp 更进一步:

  • 30 个工具 — 消息发送、富媒体、管理、交互式键盘、事件订阅、广播
  • 7 个资源 — 机器人信息、配置、聊天列表、消息历史记录、事件队列、文件元数据、审计日志
  • 3 个提示词 — 现成的管理、公告和用户报告工作流
  • 结构化输出 — 每个工具都会返回带有 outputSchema 的类型化 Pydantic 模型,便于程序解析
  • 实时事件 — 机器人通过 MCP 通知将 Telegram 事件推送给 AI 客户端(无需轮询)
  • 交互式消息 — AI Agent 可创建内联键盘菜单、处理按钮点击并编辑消息
  • 速率限制 — 内置令牌桶可防止 Telegram 429 错误
  • 权限级别 — 可限制 AI Agent 仅具备只读、消息发送、管理或完整管理员权限
  • 审计日志记录 — 通过时间戳和参数跟踪每次工具调用
  • 无需重写 — 只需在现有机器人中添加 5 行代码,并保留所有处理程序

工作原理

Telegram users                Your aiogram bot              AI agent (Claude Desktop)
      |                             |                              |
      |  send messages, tap buttons |                              |
      | --------------------------> |                              |
      |                             |  MCP server (stdio or SSE)   |
      |                             | <------------------------->  |
      |                             |  tools / resources / events  |
      |                             |                              |
      |  bot replies, shows menus   |   send_message, edit, ban    |
      | <-------------------------- | <--------------------------- |

机器人会继续正常为 Telegram 用户提供服务。MCP 服务与机器人并行运行,让 AI Agent 可通过工具和资源访问同一个机器人。

安装

pip install aiogram-mcp

需要 Python 3.10+ 和 aiogram 3.20+。

快速开始

1. 将 aiogram-mcp 添加到你的机器人
import asyncio
from aiogram import Bot, Dispatcher
from aiogram_mcp import AiogramMCP, EventManager, MCPMiddleware

bot = Bot(token="YOUR_BOT_TOKEN")
dp = Dispatcher()

# Middleware tracks chats, users, message history, and events
event_manager = EventManager()
middleware = MCPMiddleware(event_manager=event_manager)
dp.message.middleware(middleware)
dp.callback_query.middleware(middleware)  # for interactive buttons

# Register your normal handlers here
# @dp.message(...)
# async def my_handler(message): ...

# Create the MCP server
mcp = AiogramMCP(
    bot=bot,
    dp=dp,
    name="my-bot",
    middleware=middleware,
    event_manager=event_manager,
    allowed_chat_ids=[123456789],  # optional: restrict which chats AI can access
)

async def main():
    await mcp.run_alongside_bot(transport="stdio")

asyncio.run(main())
2. 连接 Claude Desktop

将以下内容添加到你的 claude_desktop_config.json:

{
  "mcpServers": {
    "my-telegram-bot": {
      "command": "python",
      "args": ["path/to/your/bot.py"],
      "env": {
        "BOT_TOKEN": "123456:ABC-DEF..."
      }
    }
  }
}

现在,Claude 可以通过你的 Telegram 机器人发送消息、读取历史记录、创建按钮菜单并响应事件。

内置工具

消息发送(5 个工具)
工具说明
send_message发送带有 HTML/Markdown 格式的文本
send_photo通过 URL 发送照片,可选添加说明文字
forward_message在聊天之间转发消息
delete_message删除消息
pin_message在聊天中置顶消息
交互式消息(3 个工具)
工具说明
send_interactive_message发送带有内联键盘按钮(回调或 URL)的消息
edit_message编辑现有消息的文本和/或键盘
answer_callback_query通过弹出提示或警告响应按钮点击
用户(3 个工具)
工具说明
get_bot_info获取机器人元数据(用户名、功能)
get_chat_member_info获取用户在聊天中的角色和个人资料
get_user_profile_photos获取用户的个人资料照片
聊天(6 个工具)
工具说明
get_chat_info获取聊天元数据(标题、类型、描述)
get_chat_members_count获取聊天中的成员数量
ban_user封禁用户(永久或临时)
unban_user解除对用户的封禁
set_chat_title更改聊天标题
set_chat_description更改聊天描述
富媒体(10 个工具)
工具描述
send_document通过 URL 发送文件/文档,可选择添加说明
send_voice通过 URL 发送语音消息
send_video通过 URL 发送视频,可选择添加说明
send_animation通过 URL 发送 GIF/动画
send_audio通过 URL 发送音频/音乐,并附带表演者和标题
send_sticker通过 file_id 或 URL 发送贴纸
send_video_note通过 URL 发送圆形视频消息
send_contact发送包含电话号码和姓名的联系人
send_location发送地理位置标记
send_poll创建包含多个选项的投票
事件(2 个工具)
工具描述
subscribe_events通过聊天/类型筛选条件订阅实时事件
unsubscribe_events移除订阅
广播(1 个工具,需主动启用)
工具描述
broadcast向多个聊天发送消息(需要 enable_broadcast=True)

MCP 资源

AI Agent 无需调用工具即可访问的只读数据:

URI描述
telegram://bot/info机器人用户名、ID 和功能
telegram://config服务名称和允许的聊天 ID
telegram://chats包含元数据的活动聊天列表
telegram://chats/{chat_id}/history聊天中的最近 50 条消息
telegram://events/queue事件队列,ID 自动递增
telegram://files/{file_id}文件元数据(大小、路径、唯一 ID)
telegram://audit/log工具调用审计日志(需主动启用)

MCP 提示词

为 AI Agent 提供结构化上下文的预构建工作流:

提示词参数功能
moderation_promptchat_id、user_id、reason获取用户信息和消息历史,建议警告、禁言或封禁
announcement_prompttopic、audience?、tone?起草格式化的 Telegram 公告
user_report_promptchat_id、user_id汇总完整的用户活动报告

实时事件流

AI Agent 无需轮询。机器人会自动推送事件:

Telegram message arrives
    → MCPMiddleware captures it
        → EventManager stores it (type: "message", "command", or "callback_query")
            → MCP notification sent to subscribed clients
                → AI agent reads telegram://events/queue

AI Agent 调用一次 subscribe_events 后,每当有新事件符合其筛选条件时,就会收到推送通知。

交互式消息

AI Agent 可以在 Telegram 中构建完整的交互式 UI——菜单、确认提示和多步骤向导:

AI Agent 发送带按钮的消息:

┌─────────────────────────┐
│ Confirm deployment?     │
│                         │
│  [✅ Yes]  [❌ No]      │
│  [📖 View docs]        │
└─────────────────────────┘

用户点击按钮 → 事件出现在队列中 → AI Agent 作出响应:

┌─────────────────────────┐
│ ✅ Deployed!            │
│                         │
│  [📋 View logs]        │
└─────────────────────────┘

机器人需要使用 dp.callback_query.middleware(middleware) 来捕获按钮点击。

安全控制

mcp = AiogramMCP(
    bot=bot,
    dp=dp,
    allowed_chat_ids=[123456789, -1001234567890],  # restrict AI access
    enable_broadcast=True,            # opt-in for broadcast tool
    max_broadcast_recipients=500,     # safety limit
)
  • allowed_chat_ids — AI 只能与列表中的聊天互动。默认值:所有聊天。
  • enable_broadcast — 出于安全考虑,广播工具默认禁用。
  • max_broadcast_recipients — 限制单次广播中的聊天数量。

高级配置

速率限制
mcp = AiogramMCP(
    bot=bot, dp=dp,
    rate_limit=30,  # requests/sec (default), 0 to disable
)

内置令牌桶速率限制器可防止 Telegram 429 错误。所有发出的 API 调用都会自动控制速率。

权限级别
mcp = AiogramMCP(
    bot=bot, dp=dp,
    permission_level="messaging",  # read + messaging tools only
)
级别访问权限
read机器人信息、聊天信息、用户资料
messaging读取权限 + 发送消息、照片、媒体和交互式消息
moderation消息权限 + 删除、置顶、封禁、解除封禁和聊天设置
admin完全访问权限,包括广播和事件订阅
审计日志
mcp = AiogramMCP(
    bot=bot, dp=dp,
    enable_audit=True,
    audit_log_size=1000,
)

每次工具调用都会记录日志。可通过 telegram://audit/log 资源访问。

示例

示例传输方式功能
basic_bot.pystdio完整设置,包含中间件、事件和回调跟踪
incident_alert_bot.pySSE启用广播的运维机器人,用于发送事件通知

开发

git clone https://github.com/Py2755/aiogram-mcp.git
cd aiogram-mcp
pip install -e ".[dev]"

pytest -v          # ~228 tests
ruff check aiogram_mcp tests examples
mypy aiogram_mcp   # strict mode

许可证

MIT。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。